#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int n;
vector<int> ss,x,y;
vector<pii> ans;
bool check(int m){
ans.assign(m,{0,0});
vector<int> plates(n),id(n),s(n),b(n),bid(n);
for(int i=0;i<n;i++){
s[i]=ss[i];
id[s[i]]=i;
plates[i]=i;
}
for(int i=0;i<m;i++){
swap(plates[x[i]],plates[y[i]]);
}
for(int i=0;i<n;i++){
b[plates[i]]=i;
bid[i]=plates[i];
}
int p=0;
for(int i=0;i<m;i++){
swap(s[x[i]],s[y[i]]);
swap(b[x[i]],b[y[i]]);
id[s[x[i]]]=x[i];
id[s[y[i]]]=y[i];
bid[b[x[i]]]=x[i];
bid[b[y[i]]]=y[i];
while(p<n&&id[p]==bid[p]){
p++;
}
if(p==n){
break;
}
pii temp={id[p],bid[p]};
swap(s[temp.first],s[temp.second]);
id[s[temp.first]]=temp.first;
id[s[temp.second]]=temp.second;
ans[i]=temp;
}
while(p<n&&id[p]==bid[p]){
p++;
}
return p==n;
}
int findSwapPairs(int N,int S[],int m,int X[],int Y[],int p[],int q[]){
n=N;
ss.assign(n,0);
x.assign(m,0);
y.assign(m,0);
for(int i=0;i<n;i++){
ss[i]=S[i];
}
for(int i=0;i<m;i++){
x[i]=X[i];
y[i]=Y[i];
}
int l=0,r=m;
while(l<r){
int mid=(l+r)>>1;
if(check(mid)){
r=mid;
}else{
l=mid+1;
}
}
check(l);
for(int i=0;i<l;i++){
p[i]=ans[i].first;
q[i]=ans[i].second;
}
return l;
}
# | 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... |