# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
587513 | benson1029 | Sorting (IOI15_sorting) | C++14 | 1051 ms | 15048 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "sorting.h"
#include<bits/stdc++.h>
using namespace std;
int a[200005], b[200005], s[200005];
vector< pair<int,int> > v;
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
int l = 0, r = N, mid;
while(l <= r) {
mid = (l+r)/2;
for(int i=0; i<N; i++) {
a[i] = i;
s[i] = S[i];
}
for(int i=mid-1; i>=0; i--) {
swap(a[X[i]], a[Y[i]]);
}
v.clear();
for(int i=0; i<mid; i++) {
swap(a[X[i]], a[Y[i]]);
swap(s[X[i]], s[Y[i]]);
for(int j=0; j<N; j++) {
b[a[j]] = j;
}
for(int j=0; j<N; j++) {
if(s[j] == a[j]) continue;
v.push_back({j, b[s[j]]});
swap(s[j], s[b[s[j]]]);
goto end;
}
v.push_back({0, 0});
end:;
}
if(l==r) {
for(int i=0; i<v.size(); i++) P[i] = v[i].first, Q[i] = v[i].second;
return v.size();
} else {
bool ok = true;
for(int i=0; i<N; i++) if(s[i] != i) ok = false;
if(ok) r = mid;
else l = mid+1;
}
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |