# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1168926 | anmattroi | Sorting (IOI15_sorting) | C++17 | 7 ms | 5468 KiB |
#include "sorting.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define maxn 200005
using namespace std;
using ii = pair<int, int>;
vector<int> Times[maxn];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
int fl = 1;
for (int i = 0; i < N; i++) if (S[i] != i) {fl = 0; break;}
if (fl == 1) return 0;
for (int i = 0; i < N; i++) Times[i].emplace_back(INT_MAX);
for (int i = M-1; i >= 0; i--) {
if (X[i] != Y[i]) {
Times[X[i]].emplace_back(i);
Times[Y[i]].emplace_back(i);
}
}
for (int idx = 0; idx < M; idx++) {
swap(S[X[idx]], S[Y[idx]]);
P[idx] = Q[idx] = 0;
int pos = -1, T = -1;
for (int i = 0; i < N; i++)
if (S[i] != i) {
while (Times[i].back() <= idx) Times[i].pop_back();
if (T < Times[i].back()) {
T = Times[i].back();
pos = i;
}
}
if (pos == -1) return idx+1;
int correct_pos = -1;
for (int i = 0; i < N; i++)
if (S[i] == pos) {
correct_pos = i;
break;
}
P[idx] = pos; Q[idx] = correct_pos;
swap(S[P[idx]], S[Q[idx]]);
int fl = 1;
for (int i = 0; i < N; i++) if (S[i] != i) {fl = 0; break;}
if (fl)
return idx+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... |