#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
//static FILE *_inputFile, *_outputFile;
int n;
vector<pair<int,int> > v;
int p[200001],pos[200001];
void swaps()
{
for(int i=0; i<n; i++)
pos[p[i]]=i;
for(int i=0; i<n; i++)
{
if(p[i]!=i)
{
v.push_back({i,p[i]});
pos[p[i]]=pos[i];
swap(p[i],p[pos[i]]);
}
}
}
int findSwapPairs(int N, int S[], int M, int X[], int Y[],int P[],int Q[])
{
n=N;
int ans=0;
int l=0,r=M;
while(l<=r)
{
int m=(l+r)/2;
for(int i=0; i<n; i++)
p[i]=S[i];
for(int i=0; i<m; i++)
swap(p[X[i]],p[Y[i]]);
v.clear();
swaps();
if(v.size()<=m)
{
r=m-1;
ans=m;
}
else l=m+1;
}
for(int i=0; i<n; i++)
p[i]=S[i];
for(int i=0; i<ans; i++)
swap(p[X[i]],p[Y[i]]);
v.clear();
swaps();
//for(int i=0;i<ans;i++)
// fprintf(_outputFile, "%d %d ", v[i].first, v[i].second);
for(int i=0;i<n;i++)
p[i]=S[i];
for(int i=0; i<n; i++)
pos[p[i]]=i;
for(int i=0; i<ans; i++)
{
pos[p[Y[i]]]=X[i];
pos[p[X[i]]]=Y[i];
swap(p[X[i]],p[Y[i]]);
P[i]=pos[v[i].first];
Q[i]=pos[v[i].second];
pos[p[P[i]]]=Q[i];
pos[p[Q[i]]]=P[i];
swap(p[P[i]],p[Q[i]]);
}
return ans;
}
/*
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i];
}
*/
# | 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... |