Submission #226193

#TimeUsernameProblemLanguageResultExecution timeMemory
226193MKopchevSwap (BOI16_swap)C++14
100 / 100
697 ms3704 KiB
#include<bits/stdc++.h> using namespace std; const int nmax=2e5+42; int n,inp[nmax]; int would_go(int pos,int val) { if(2*pos>n)return pos; if(val<inp[2*pos]&&val<inp[2*pos+1])return pos; if(inp[2*pos]<val&&inp[2*pos]<inp[2*pos+1])return would_go(2*pos,val); int x=val,y=inp[2*pos]; if(x>y)swap(x,y); if(would_go(2*pos,x)<would_go(2*pos+1,x)) { if(val==x)return would_go(2*pos,val); return would_go(2*pos+1,val); } if(val==x)return would_go(2*pos+1,val); return would_go(2*pos,val); } int main() { scanf("%i",&n); for(int i=1;i<=n;i++)scanf("%i",&inp[i]); inp[n+1]=n+1; for(int i=1;2*i+1<=n;i++) { if(inp[i]<inp[2*i]&&inp[i]<inp[2*i+1])continue; if(inp[2*i]<inp[i]&&inp[2*i]<inp[2*i+1]){swap(inp[i],inp[2*i]);continue;} int x=inp[i],y=inp[2*i],small=inp[2*i+1]; if(x>y)swap(x,y); if(would_go(2*i,x)<would_go(2*i+1,x)){inp[2*i]=x;inp[2*i+1]=y;} else {inp[2*i]=y;inp[2*i+1]=x;} inp[i]=small; } if(n%2==0&&inp[n/2]>inp[n])swap(inp[n/2],inp[n]); for(int i=1;i<=n;i++) { printf("%i",inp[i]); if(i==n)printf("\n"); else printf(" "); } return 0; }

Compilation message (stderr)

swap.cpp: In function 'int main()':
swap.cpp:30:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&n);
     ~~~~~^~~~~~~~~
swap.cpp:31:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i=1;i<=n;i++)scanf("%i",&inp[i]);
                          ~~~~~^~~~~~~~~~~~~~
#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...