Submission #48990

#TimeUsernameProblemLanguageResultExecution timeMemory
48990NamnamseoSorting (IOI15_sorting)C++17
100 / 100
509 ms12412 KiB
#include "sorting.h" #include <algorithm> #include <vector> using namespace std; typedef pair<int,int> pp; int *x; int n; int *ea, *eb; int *oa, *ob; int cur[200010]; int mp [200010]; void w(int a,int b){ swap(cur[a], cur[b]); swap(mp[cur[a]], mp[cur[b]]); } bool possible(int t){ for(int i=0; i<n; ++i) cur[i] = x[i], mp[x[i]]=i; for(int i=0; i<t; ++i){ int a=ea[i], b=eb[i]; w(a,b); } int ind=0; for(int i=0; i<n; ++i){ if(mp[i]==i) continue; int a=i, b=mp[i]; oa[ind]=cur[i]; ob[ind]=i; ++ind; w(a, b); } if(ind>t) return false; for(;ind<t;++ind) oa[ind]=ob[ind]=0; for(int i=0; i<n; ++i) cur[i] = x[i], mp[x[i]]=i; for(int i=0; i<t; ++i){ int a=ea[i], b=eb[i]; swap(cur[a], cur[b]); swap(mp[cur[a]], mp[cur[b]]); int p=oa[i], q=ob[i]; oa[i]=mp[p]; ob[i]=mp[q]; w(oa[i], ob[i]); } return true; } int findSwapPairs(int N, int x_[], int m, int EA[], int EB[], int p[], int q[]) { n=N; x=x_; ea=EA; eb=EB; oa=p; ob=q; int l=0, r=m; if(possible(l)) return l; while(l+1<r){ int mid=(l+r)/2; if(possible(mid)) r=mid; else l=mid; } possible(r); return r; }
#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...