Submission #885853

#TimeUsernameProblemLanguageResultExecution timeMemory
885853JakobZorzSorting (IOI15_sorting)C++17
100 / 100
189 ms21772 KiB
#include"sorting.h" #include<iostream> #include<vector> using namespace std; int n; int*x,*y,*s; vector<pair<int,int>>construct(int m){ vector<pair<int,int>>ans(m); vector<int>perm(n),curr(n),inv_perm(n),inv_curr(n); for(int i=0;i<n;i++){ perm[i]=i; inv_perm[i]=i; curr[i]=s[i]; inv_curr[curr[i]]=i; } for(int i=0;i<m;i++){ swap(curr[x[i]],curr[y[i]]); swap(inv_curr[curr[x[i]]],inv_curr[curr[y[i]]]); } for(int i=m-1;i>=0;i--){ swap(perm[x[i]],perm[y[i]]); swap(inv_perm[perm[x[i]]],inv_perm[perm[y[i]]]); } int fi=0; for(int i=0;i<m;i++){ swap(perm[x[i]],perm[y[i]]); swap(inv_perm[perm[x[i]]],inv_perm[perm[y[i]]]); while(fi<n&&curr[fi]==fi) fi++; if(fi!=n){ ans[i].first=inv_perm[fi]; int k=inv_curr[fi]; swap(curr[fi],curr[k]); swap(inv_curr[curr[fi]],inv_curr[curr[k]]); ans[i].second=inv_perm[k]; } } for(int i=0;i<n;i++) if(curr[i]!=i) return {}; return ans; } int findSwapPairs(int N,int S[],int _,int X[],int Y[],int P[],int Q[]){ n=N; x=X; y=Y; s=S; bool already_done=true; for(int i=0;i<n;i++) if(s[i]!=i) already_done=false; if(already_done) return 0; int l=0,r=n; while(l<r-1){ int mid=(l+r)/2; if(construct(mid).empty()) l=mid; else r=mid; } int opt=r; vector<pair<int,int>>res=construct(opt); for(int i=0;i<opt;i++){ P[i]=res[i].first; Q[i]=res[i].second; } return opt; }

Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:54:37: warning: unused parameter '_' [-Wunused-parameter]
   54 | int findSwapPairs(int N,int S[],int _,int X[],int Y[],int P[],int Q[]){
      |                                 ~~~~^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...