Submission #585521

#TimeUsernameProblemLanguageResultExecution timeMemory
585521hibiki정렬하기 (IOI15_sorting)C++11
54 / 100
3 ms1364 KiB
#include "sorting.h" #include<bits/stdc++.h> using namespace std; #define pb push_back #define f first #define s second #define all(x) x.begin(),x.end() #define sz(x) (int)x.size() int idx[200005], idx2[200005], sta[200005], sta2[200005]; int val[200005]; int st[200005 * 3],ed[200005 * 3]; int vi[200005]; int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { int l = 0, r = M - 1; while(l <= r) { for(int i = 0; i < N; i++) val[S[i]] = i, idx[i] = idx2[i] = sta[i] = sta2[i] = i; memset(vi, 0, sizeof(vi)); int mid = (l + r) / 2; for(int m = 0; m <= mid; m++) { swap(idx[sta[X[m]]],idx[sta[Y[m]]]); swap(sta[X[m]],sta[Y[m]]); } int cnt = 0; for(int i = 0; i < N; i++) { if(!vi[i]) { int nw = i; while(!vi[nw]) { vi[nw] = 1; st[cnt] = sta[nw]; ed[cnt] = sta[idx[val[nw]]]; cnt++; nw = idx[val[nw]]; } cnt--; } } if(l == r) { for(int i = 0; i < cnt; i++) { swap(idx2[sta2[X[i]]],idx2[sta2[Y[i]]]); swap(sta2[X[i]],sta2[Y[i]]); P[i] = idx2[st[i]]; Q[i] = idx2[ed[i]]; } for(int i = cnt; i < mid + 1; i++) P[i] = 0, Q[i] = 0; return mid + 1; } if(cnt <= mid + 1) r = mid; else l = mid + 1; } return -1; }
#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...