Submission #804996

#TimeUsernameProblemLanguageResultExecution timeMemory
804996tomrukSorting (IOI15_sorting)C++17
0 / 100
1 ms596 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]]); } 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]]]); } } if(is_sorted(v.begin(),v.end())){ r = m; } else l = m + 1; } int m = M; 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]]); } 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++; } P[i] = Q[i] = 0; if(last < N){ P[i] = last; Q[i] = pos[v[last]]; swap(v[last],v[pos[v[last]]]); } } 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...