# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
974065 | PagodePaiva | Sorting (IOI15_sorting) | C++17 | 1 ms | 600 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>
#include "sorting.h"
using namespace std;
int findSwapPairs(int n, int st[], int m, int x[], int y[], int p[], int q[]) {
bool aux = true;
for(int i = 0;i < n;i++){
if(st[i] != i) aux = false;
}
if(aux){
return 0;
}
int l = 0, r = m-1, res = 0;
while(l <= r){
int mid = (l+r)/2;
vector <int> v;
for(int i = 0;i < n;i++){
v.push_back(i);
}
for(int i = mid;i >= 0;i--){
swap(v[x[i]], v[y[i]]);
}
int pai[n];
for(int i = 0;i < n;i++){
pai[v[i]] = st[i];
}
int resp = 0;
int mark[n];
memset(mark, 0, sizeof mark);
for(int i = 0;i < n;i++){
if(mark[i]) continue;
int x = i;
while(!mark[x]){
mark[x] = 1;
resp++;
x = pai[x];
}
resp--;
}
if(resp <= mid+1){
res = mid;
r = mid-1;
}
else{
l = mid+1;
}
}
vector <int> v;
for(int i = 0;i < n;i++){
v.push_back(i);
}
int inv[n+1], invst[n+1];
for(int i = res;i >= 0;i--){
swap(v[x[i]], v[y[i]]);
}
for(int i = 0;i < n;i++){
inv[v[i]] = i;
invst[st[i]] = i;
}
for(int at = 0, i = 0;i <= res;i++){
while(at < n){
if(st[at] == v[at]) at++;
else break;
}
if(at == n) return i;
swap(v[x[i]], v[y[i]]);
swap(inv[v[x[i]]], inv[v[y[i]]]);
swap(st[x[i]], st[y[i]]);
swap(invst[st[x[i]]], invst[st[y[i]]]);
p[i] = at;
q[i] = invst[v[at]];
swap(st[at], st[invst[v[at]]]);
swap(invst[st[p[i]]], invst[st[q[i]]]);
at++;
}
return res+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... |