#include <bits/stdc++.h>
#include "sorting.h"
using namespace std;
int findSwapPairs(int n, int s[], int m, int x[], int y[], int p[], int q[]) {
int l=0,r=m;
while(l<r){
int mid=(l+r)/2;
int a[n];
for(int i=0;i<n;i++)a[i]=s[i];
for(int i=0;i<mid;i++)swap(a[x[i]],a[y[i]]);
vector<pair<int,int>> v;
int idx[n];
for(int i=0;i<n;i++)idx[a[i]]=i;
for(int i=0;i<n;i++)if(a[i]!=i){
v.push_back({i,idx[i]});
swap(a[i],a[idx[i]]);
swap(idx[a[i]],idx[a[idx[i]]]);
}
if(v.size()<=mid)r=mid;
else l=mid+1;
}
m=l;
int a[n];
for(int i=0;i<n;i++)a[i]=s[i];
for(int i=0;i<m;i++)swap(a[x[i]],a[y[i]]);
vector<pair<int,int>> v;
int idx[n];
for(int i=0;i<n;i++)idx[a[i]]=i;
for(int i=0;i<n;i++)if(a[i]!=i){
v.push_back({i,idx[i]});
swap(a[i],a[idx[i]]);
swap(idx[a[i]],idx[a[idx[i]]]);
}
iota(a,a+n,0);
iota(idx,idx+n,0);
while(v.size()<m)v.push_back({0,0});
for(int i=m-1;i>-1;i--){
auto[i1,i2]=v[i];
p[i]=idx[i1];
q[i]=idx[i2];
swap(a[x[i]],a[y[i]]);
swap(idx[a[x[i]]],idx[a[y[i]]]);
}
return m;
}
# | 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... |