Submission #669757

#TimeUsernameProblemLanguageResultExecution timeMemory
669757alvingogoSorting (IOI15_sorting)C++14
0 / 100
1 ms340 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; int findSwapPairs(int N,int S[],int M,int X[],int Y[],int P[],int Q[]){ int l=0,r=M; int n=N; while(r>l){ int m=(l+r)/2; vector<int> v(n); iota(v.begin(),v.end(),0); for(int i=0;i<m;i++){ swap(v[X[i]],v[Y[i]]); } vector<int> g(n); for(int i=0;i<n;i++){ g[v[i]]=S[i]; } vector<int> vis(n); int cnt=0; for(int i=0;i<n;i++){ if(!vis[i]){ cnt++; vis[i]=1; int a=i; while(1){ a=g[a]; if(vis[a]){ break; } vis[a]=1; } } } int t=n-cnt; if(t<=m){ r=m; } else{ l=m+1; } } vector<int> v(n); iota(v.begin(),v.end(),0); for(int i=0;i<l;i++){ swap(v[X[i]],v[Y[i]]); } vector<int> g(n); for(int i=0;i<n;i++){ g[v[i]]=i; } v=g; vector<int> d(n),e(n); for(int i=0;i<n;i++){ d[S[i]]=i; e[v[i]]=i; } vector<int> vis(n); int cnt=0; int c=0,cn=0; for(int i=0;i<l;i++){ { int t=X[i],f=Y[i]; swap(d[S[t]],d[S[f]]); swap(S[t],S[f]); swap(e[v[t]],e[v[f]]); swap(v[t],v[f]); } while(cn<n){ if(v[cn]!=S[cn]){ int t=cn,f=d[v[cn]]; swap(d[S[t]],d[S[f]]); swap(S[t],S[f]); assert(v[cn]==S[cn]); P[c]=t; Q[c]=f; c++; cn++; break; } cn++; } } assert(cn==n); return l; } /* int main(){ int N, M; cin >> N; int *S = (int*)malloc(sizeof(int) * (unsigned int)N); for (int i = 0; i < N; ++i) cin >> S[i]; cin >> M; int *X = (int*)malloc(sizeof(int) * (unsigned int)M), *Y = (int*)malloc(sizeof(int) * (unsigned int)M); for (int i = 0; i < M; ++i) { cin >> X[i]; cin >> Y[i]; } int *P = (int*)malloc(sizeof(int) * (unsigned int)M), *Q = (int*)malloc(sizeof(int) * (unsigned int)M); int ans = findSwapPairs(N, S, M, X, Y, P, Q); cout << ans << "\n"; for (int i = 0; i < ans; ++i) cout << P[i] << " " << Q[i] << "\n"; return 0; } */

Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:63:9: warning: unused variable 'cnt' [-Wunused-variable]
   63 |     int cnt=0;
      |         ^~~
#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...