Submission #1135592

#TimeUsernameProblemLanguageResultExecution timeMemory
1135592LuvidiSorting (IOI15_sorting)C++20
100 / 100
121 ms12588 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...