# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
41878 | funcsr | Sorting (IOI15_sorting) | C++14 | 13 ms | 10112 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 <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cassert>
using namespace std;
#define rep(i, n) for (int i=0; i<(n); i++)
#define pb push_back
#define _1 first
#define _2 second
#define INF 1145141919
#define MOD 1000000007
bool used[200000];
vector<int> G[200000];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
if (is_sorted(S, S+N)) return 0;
// subtask 1-4
rep(i, N) used[i] = false;
for (int i=M-1; i>=0; i--) {
if (X[i] == Y[i]) continue;
if (!used[X[i]]) {
G[i].pb(X[i]);
used[X[i]] = true;
}
if (!used[Y[i]]) {
G[i].pb(Y[i]);
used[Y[i]] = true;
}
}
vector<int> ps;
rep(i, M) {
swap(S[X[i]], S[Y[i]]);
//rep(i, N) cout<<S[i]<<",";cout<<"\n";
for (int t : G[i]) if (S[t] != t) ps.pb(t);
if (ps.empty()) {
P[i] = Q[i] = 0;
continue;
}
bool ok = false;
rep(j, ps.size()) rep(k, j) {
if (ok) break;
int x = ps[j], y = ps[k];
if (S[x] == y && x == S[y]) {
ok = true;
swap(S[x], S[y]);
P[i] = x, Q[i] = y;
break;
}
}
if (!ok) {
int x = ps[0], y = -1;
rep(i, N) if (S[i] == x) y = i;
swap(S[x], S[y]);
P[i] = x, Q[i] = y;
}
vector<int> nps;
for (int x : ps) if (S[x] != x) nps.pb(x);
swap(ps, nps);
if (is_sorted(S, S+N)) {
M = i+1;
break;
}
//cout<<"->"; rep(i, N) cout<<S[i]<<",";cout<<"\n";
}
rep(i, N) assert(S[i] == i);
assert(ps.empty());
return M;
}
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... |