Submission #804980

#TimeUsernameProblemLanguageResultExecution timeMemory
804980tomrukSorting (IOI15_sorting)C++17
0 / 100
2 ms724 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { int l = 0,r = M; while(l < r){ int m = (l + r)/2; vector<int> v; for(int i = 0;i<N;i++){ v.push_back(S[i]); } vector<int> ord(N,0); iota(ord.begin(),ord.end(),0); vector<int> pos = ord; for(int i = m-1;i>=0;i--){ pos[ord[Y[i]]] = X[i]; pos[ord[X[i]]] = Y[i]; swap(ord[X[i]],ord[Y[i]]); } // for(auto u:v){ // cout << u << ' '; // } // cout << endl; int last = -1; for(int i = 0;i<m;i++){ pos[ord[Y[i]]] = X[i]; pos[ord[X[i]]] = Y[i]; swap(ord[X[i]],ord[Y[i]]); swap(v[X[i]],v[Y[i]]); last++; while(last < N && last == pos[v[last]]){ last++; } if(last < N){ swap(v[last],v[pos[v[last]]]); } // for(auto u:v){ // cout << u << ' '; // } // cout << endl; } //cout << l << ' ' << r << endl; if(is_sorted(v.begin(),v.end())){ r = m; } else l = m + 1; } vector<int> v; for(int i = 0;i<N;i++){ v.push_back(S[i]); } vector<int> ord(N,0); iota(ord.begin(),ord.end(),0); vector<int> pos = ord; for(int i = l-1;i>=0;i--){ pos[ord[Y[i]]] = X[i]; pos[ord[X[i]]] = Y[i]; swap(ord[X[i]],ord[Y[i]]); } // for(auto u:v){ // cout << u << ' '; // } // cout << endl; int last = -1; for(int i = 0;i<l;i++){ pos[ord[Y[i]]] = X[i]; pos[ord[X[i]]] = Y[i]; swap(ord[X[i]],ord[Y[i]]); swap(v[X[i]],v[Y[i]]); last++; while(last < N && last == pos[v[last]]){ last++; } P[i] = Q[i] = 0; if(last < N){ P[i] = last; Q[i] = pos[v[last]]; swap(v[last],v[pos[v[last]]]); } // for(auto u:v){ // cout << u << ' '; // } // cout << endl; } assert(is_sorted(v.begin(),v.end())); return l; }
#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...