# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
583861 | M_W | Sorting (IOI15_sorting) | C++17 | 13 ms | 468 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 <bits/stdc++.h>
#define ii pair<int, int>
using namespace std;
int S[200002];
int gp = 0, pa[200002], from[200002], aa[200002];
bool vis[200002];
int findpa(int a){
return pa[a] == a ? a : findpa(pa[a]);
}
int findSwapPairs(int N, int S_tmp[], int M, int X[], int Y[], int P[], int Q[]) {
for(int i = 0; i < N; i++){
S[i] = S_tmp[i]; pa[i] = -1;
}
for(int i = 0; i < N; i++){
if(vis[i]) continue;
int cur = i;
while(!vis[cur]){
vis[cur] = true;
cur = S[cur];
}
gp++;
}
// Already sorted
if(N == gp){
P[0] = 0; Q[0] = 0;
return 0;
}
// Nah
for(int k = 0; k < N; k++){
swap(S[X[k]], S[Y[k]]);
gp = 0;
for(int i = 0; i < N; i++) vis[i] = false;
for(int i = 0; i < N; i++){
if(vis[i]) continue;
int cur = i;
while(!vis[cur]){
vis[cur] = true;
from[S[cur]] = cur;
cur = S[cur];
}
gp++;
}
if(N - k - 1 <= gp){
queue<ii> q;
for(int i = 0; i < N; i++) vis[i] = false;
for(int i = 0; i < N; i++){
if(vis[i]) continue;
int cur = from[i]; vis[i] = true;
while(!vis[cur]){
vis[cur] = true;
q.push({i, cur});
cur = from[cur];
}
}
for(int i = 0; i < N; i++) aa[i] = i;
for(int j = k; j >= 0; j--){
if(q.empty()) P[j] = Q[j] = 0;
else{
auto [u, v] = q.front();
q.pop();
P[j] = aa[u];
Q[j] = aa[v];
swap(aa[X[j]], aa[Y[j]]);
}
}
return k + 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... |