Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
30510 baka24 【S】T3 C++ 运行超时 54 1061 MS 309720 KB 1899 2024-07-19 16:32:41

Tests(6/11):


#include<bits/stdc++.h> using namespace std; #define pb push_back #define inx int I=h[u],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v inline int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int M=20,MN=1<<M,MAXN=1000010+(1<<M),Mod=1000000007; int n,a[MAXN],p[MAXN]; struct Edge{int v,nx;}edge[MAXN*M+10];int h[MAXN],CNT;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;} priority_queue<int>q[MAXN]; int low[MAXN],bel[MAXN],k,stk[MAXN],dfn[MAXN],cnt; struct ST{ int C[MAXN],cnt; void push(int x){ C[++cnt]=x; } void pop(){ cnt--; } int top(){ return C[cnt]; } }st; void tg(int u){ stk[u]=1;dfn[u]=++cnt; low[u]=dfn[u];st.push(u); for(inx){ if(stk[v]){ low[u]=min(low[u],dfn[v]); continue; } if(!dfn[v]){ tg(v); low[u]=min(low[u],low[v]); } } if(low[u]==dfn[u]){ k++; while(st.top()!=u){ bel[st.top()]=k; stk[st.top()]=0; st.pop(); } bel[st.top()]=k; stk[u]=0; st.pop(); } } void slv(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(),add_side(MN+i,(1<<M)-1-a[i]),add_side(a[i],MN+i); for(int i=0;i<1<<M;i++){ for(int j=0;j<M;j++){ if(i&(1<<j))add_side(i,i^(1<<j)); } } for(int i=0;i<=MN+n;i++){ if(!dfn[i])tg(i); } for(int i=1;i<=n;i++)p[i]=bel[i+MN],q[p[i]].push(-a[i]); for(int i=1;i<=n;i++){ printf("%d ",-q[p[i]].top()); q[p[i]].pop(); } } signed main(){ // freopen("seq.in","r",stdin);freopen("seq.out","w",stdout); slv(); //cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s"<<endl; return 0; }


测评信息: