Submission #520847

#TimeUsernameProblemLanguageResultExecution timeMemory
520847christinelynnSwap (BOI16_swap)C++17
100 / 100
108 ms31788 KiB
#include <bits/stdc++.h> using namespace std; #define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl #define print(v,r) f(i,0,r) cout<<v[i]<<" "; cout<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define Add(x,y) x=(x+y)%mod #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first const int N=1e6+99; int n,t,s[N],a[N],ans[N]; vector<int> g[N]; void Min(int &id,int x){ if(a[x]<a[id]) id=x; } bool is_par(int u,int v){ while(u<v) v/=2; return (u==v); } int main(){ fill(s,s+N,-1); a[0]=N; cin>>n; f(i,1,n+1){ cin>>a[i]; } f(i,1,n+1){ int id=0,u=i; if(s[i]!=1) id=i; if(i*2<=n) Min(id,i*2+0); if(i*2<n) Min(id,i*2+1); while(u>1 && s[u]!=0){ if((u&1) && s[u^1]!=0){ Min(id,u^1); } if(s[u/2]!=1 && (u%2==0 || s[u^1]!=1)){ Min(id,u/2); } if((u&1) && s[u^1]==1){ break; } u/=2; } if(id==i*2){ s[i*2+0]=1; s[i*2+1]=0; } else if(id==i*2+1){ s[i*2+1]=1; } else if(i==id){ s[i]=0; s[i*2+0]=0; s[i*2+1]=0; } else if(is_par(id,i)){ int lastu=0; s[id]=0; s[i*2+0]=0; s[i*2+1]=0; u=i; while(u!=id){ s[u]=1; if((u&1)){ s[u^1]=0; } lastu=u; u/=2; } if(lastu&1){ s[lastu^1]=0; } } else{ s[i*2+0]=0; s[i*2+1]=0; u=i; s[id]=1; while(u>1 && u*2!=id){ s[u]=1; if((u^1)!=id && (u&1)){ s[u^1]=0; } u/=2; if(u==0) exit(0); } } ans[i]=a[id]; } f(i,1,n+1){ cout<<ans[i]<<" "; } } /* 8 5 1 4 6 2 8 7 3 1 2 4 3 5 8 7 6 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...