Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
30410 liuyile 【S】T3 C++ 编译错误 0 0 MS 0 KB 1599 2024-07-19 13:55:31

Tests(0/0):


#include <bits/stdc++.h> // #pragma GCC optimize("Ofast,unroll-loops,inline") using namespace std; // #pragma GCC optimize(3) // #define int long long #define endl "\n" int n; int a[2100300]; vector<int>g[2100300]; vector<int>loc[2100300]; vector<int>w[2100300]; const int N=(1<<20)-1; const int LG=20; int dfn[2100300],low[2100300]; int tp; int tk=0,cnt=0; int bel[2100300]; int S[2100300]; int hd[2100000]; struct node{int v,nxt;}E[1000030*20+2000000]; int ec=0; inline void ins(int u,int v){ ++ec; E[ec]={v,hd[u]}; hd[u]=ec; } inline void mn(int &x,int y){ if(x>y)x=y; } inline void dfs(int &u){ dfn[u]=low[u]=++tk; S[++tp]=u; for(int i=hd[u];i;i=E[i].nxt){ int v=E[i].v; if(!dfn[v])dfs(v),mn(low[u],low[v]); else if(!bel[v])mn(low[u],dfn[v]); } if(dfn[u]==low[u]){ ++cnt; while(tp){ int x=S[tp]; tp--; bel[x]=cnt; if(x==u)break; } } } signed main(){ ios::sync_with_stdio(0); // freopen("seq.in","r",stdin); // freopen("seq.out","w",stdout); for(int i=1;i<=N;i++) for(int j=0;j<LG;j++) if((i>>j)&1) ins(i,i^(1<<j)); scanf("%d ",&n); for(int i=1;i<=n;i++) scanf("%d" ,&a[i]); for(int i=1;i<=n;i++) ins(i+N,N^a[i]),ins(a[i],N+i); dfs(N); for(int i=1;i<=n;i++) loc[bel[i+N]].emplace_back(i), w[bel[i+N]].emplace_back(a[i]); for(int i=1;i<=cnt;i++){ sort(loc[i].begin(),loc[i].end()); sort(w[i].begin(),w[i].end()); int k=loc[i].size(); for(int j=0;j<k;j++) a[loc[i][j]]=w[i][j]; } for(int i=1;i<=n;i++) printf("%d ",a[i]); cout.flush(); return 0; }


测评信息: