Submission #408776

#TimeUsernameProblemLanguageResultExecution timeMemory
408776MDarioSorting (IOI15_sorting)C++11
0 / 100
1089 ms1228 KiB
#include "sorting.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; #define F first #define S second int n, s[200001], m, x[600001], y[600001]; bool f(ll xf){ int s1[200001]; for(int i=0; i<n; i++){ s1[i]=s[i]; } int c=0; for(int i=0; i<xf; i++){ swap(s1[x[i]], s1[y[i]]); } for(int i=0; i<n; i++){ while(s1[i]!=i){ c++; swap(s1[i], s1[s[i]]); } } return (c<=xf); } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n=N; m=M; for(int i=0; i<n; i++){ s[i]=S[i]; } for(int i=0; i<m; i++){ x[i]=X[i]; y[i]=Y[i]; } if(f(1)){ swap(s[x[0]], s[y[0]]); for(int i=0; i<n; i++){ if(s[i]!=i){ P[0]=i; Q[0]=s[i]; swap(s[i], s[s[i]]); } } return 1; } int l=1, r=m+1, mid=0; while(l+1<r){ mid=(l+r)/2; if(f(mid)){ r=mid; } else l=mid; } int c=0; for(int i=0; i<=l; i++){ swap(s[x[i]], s[y[i]]); } for(int i=0; i<n; i++){ while(s[i]!=i){ P[c]=i; Q[c]=s[i]; c++; swap(s[i], s[s[i]]); } } return l+1; }
#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...