| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1308714 | paulllol | Sorting (IOI15_sorting) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int n,t1,t2,m,l,mid,r,temp,x,y,turn,val,cnt;
vector<int> v;
vector<pair<int,int>> s;
bool vs[200000];
void loop(int i){
vs[i]=1;
cnt+=1;
if(vs[v[i]]==0){
loop(v[i]);
}
}
int main() {
cin.tie(NULL)->sync_with_stdio(false);
freopen("sorting.in", "r", stdin);
freopen("sorting.out", "w", stdout);
cin>>n;
for (int i=0;i<n;i++) {
cin>>t1;
v.emplace_back(t1);
}
cin>>m;
for (int i=0;i<m;i++) {
cin>>t1>>t2;
s.emplace_back(make_pair(t1,t2));
}
r=m;
temp=0;
while(l!=r){
val=0;
memset(vs,0,sizeof(vs));
mid=(l+r)/2;
if(mid<temp){
for(int i=mid+1;i>temp;i--){
x=s[i].first;
y=s[i].second;
if(x!=y){
v[x]^=v[y];
v[y]^=v[x];
v[x]^=v[y];
}
}
}
else{
for(int i=temp;i<=mid;i++){
x=s[i].first;
y=s[i].second;
if(x!=y){
v[x]^=v[y];
v[y]^=v[x];
v[x]^=v[y];
}
}
}
temp=mid;
for(int i=0;i<n;i++){
if(vs[i]==0){
if(i!=v[i]){
vs[i]=1;
cnt=0;
loop(v[i]);
val+=cnt;
}
}
}
if(val>mid){
l=mid+1;
}
else{
r=mid;
}
}
cout<<l;
}
