提交时间:2024-07-19 18:48:59
运行 ID: 30556
#include<bits/stdc++.h> #define ll long long using namespace std; const ll maxn=1e6+300; const ll maxm=(1<<20)-1; int n,m,t,k,cnt=0,tot=0,root; int fa[maxn],a[maxn]; map<int,int> mp[maxn]; stack<ll> stk; vector<ll> q[2000300]; int find_root(int x){ if(fa[x]==x) return x; return fa[x]=find_root(fa[x]); } inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();} return x*f; } int main(){ //freopen("seq.in","r",stdin); // freopen("seq.out","w",stdout); n=read(); for(ll i=1ll;i<=n;i++){ a[i]=read(); fa[i]=i; } for(int i=1;i<=n;i++){ for(int j=1;j<i;j++){ if((a[i]&a[j])==0){ int fi=find_root(i),fj=find_root(j); if(fi!=fj) fa[fi]=fj; } } } for(int i=1;i<=n;i++){ mp[find_root(i)][a[i]]++; } for(int i=1;i<=n;i++){ auto it=mp[find_root(i)].begin(); printf("%lld ",(*it).first); (*it).second--; if(!(*it).second) mp[find_root(i)].erase(it); } //fclose(stdin); // fclose(stdout); return 0; }