Submission #438874

#TimeUsernameProblemLanguageResultExecution timeMemory
438874NintsiChkhaidzeSorting (IOI15_sorting)C++14
100 / 100
723 ms28112 KiB
#include "sorting.h" #include <iostream> #define s second #define f first #define pii pair<int,int> using namespace std; int idx[200005],a[200005]; pii d[600005]; int findSwapPairs(int N, int S[], int M, int x[], int y[], int p[], int q[]) { bool c = 1; for (int i=0;i<N;i++) if (S[i] != i) c=0; if (c) return 0; int l = 1,r = M,ans = 0; while(l <= r){ int mid = (l+r)>>1; for (int i=0;i<N;i++){ a[i] = S[i]; idx[S[i]] = i; } for (int i = 0; i < mid; i++){ swap(a[x[i]],a[y[i]]); swap(idx[a[x[i]]],idx[a[y[i]]]); } int cnt = 0; for (int i = 0; i < N; i++){ if (a[i] == i) continue; d[cnt] = {a[i],i}; cnt++; int ind = idx[i]; swap(idx[a[i]],idx[i]); swap(a[i],a[ind]); } for (int i = cnt; i < M; i++) d[i] = {0,0}; if (cnt <= mid){ ans = mid; for (int i=0;i<N;i++){ a[i] = S[i]; idx[S[i]] = i; } for (int i = 0; i < M; i++){ swap(a[x[i]],a[y[i]]); swap(idx[a[x[i]]],idx[a[y[i]]]); p[i] = d[i].f; q[i] = d[i].s; swap(idx[p[i]],idx[q[i]]); p[i] = idx[p[i]]; q[i] = idx[q[i]]; swap(a[p[i]],a[q[i]]); } r = mid - 1; } else { l = mid + 1; } } return ans; }
#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...