Submission #1147086

#TimeUsernameProblemLanguageResultExecution timeMemory
1147086heeheeheehaawSorting (IOI15_sorting)C++20
100 / 100
162 ms19488 KiB
#include <bits/stdc++.h> #include "sorting.h" using namespace std; int a[600005]; int poza[600005], pozv[600005]; int p[600005], q[600005], cv[600005]; int pp[600005], qq[600005]; int findSwapPairs(int n, int v[], int m, int x[], int y[], int P[], int Q[]) { for(int i = 0; i < n; i++) cv[i] = v[i]; int st = 0, dr = m; int r = m; while(st <= dr) { int mij = (st + dr) / 2; for(int i = 0; i < n; i++) v[i] = cv[i], a[i] = i, poza[i] = i, pozv[v[i]] = i; for(int i = 0; i < m; i++) p[i] = 0, q[i] = 0; for(int i = mij - 1; i >= 0; i--) { swap(poza[a[x[i]]], poza[a[y[i]]]); swap(a[x[i]], a[y[i]]); } int prev = 0, rez = 0; for(int i = 0; i < mij; i++) { swap(poza[a[x[i]]], poza[a[y[i]]]); swap(a[x[i]], a[y[i]]); swap(pozv[v[x[i]]], pozv[v[y[i]]]); swap(v[x[i]], v[y[i]]); if(prev >= n) break; while(prev < n && poza[prev] == pozv[prev]) prev++; p[i] = pozv[prev]; q[i] = poza[prev]; int le = pozv[prev], ri = poza[prev]; swap(pozv[prev], pozv[v[poza[prev]]]); swap(v[le], v[ri]); rez++; prev++; } while(prev < n && poza[prev] == pozv[prev]) prev++; if(prev >= n) { r = rez, dr = mij - 1; for(int i = 0; i < rez; i++) pp[i] = p[i], qq[i] = q[i]; } else st = mij + 1; } for(int i = 0; i < r; i++) { P[i] = pp[i], Q[i] = qq[i]; if(P[i] > Q[i]) swap(P[i], Q[i]); } 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...