제출 #1147129

#제출 시각아이디문제언어결과실행 시간메모리
1147129alexddSorting (IOI15_sorting)C++20
0 / 100
63 ms584 KiB
#include "sorting.h" #include<bits/stdc++.h> using namespace std; int n,m; pair<int,int> his[600005],sol[600005]; int init[200005],ord[200005],unde[200005],final[200005],ufin[200005]; bool is_sorted() { for(int i=1;i<n;i++) if(ord[i]<ord[i-1]) return 0; return 1; } bool verif(int ult) { for(int i=0;i<n;i++) ord[i] = final[i] = init[i]; for(int i=0;i<=ult;i++) swap(final[his[i].first], final[his[i].second]); for(int i=0;i<n;i++) unde[ord[i]] = i; for(int i=0;i<n;i++) ufin[final[i]] = i; for(int pas=0;pas<=ult;pas++) { swap(unde[ord[his[pas].first]], ord[his[pas].second]); swap(ord[his[pas].first],ord[his[pas].second]); //for(int i=pas+1;i<=ult;i++) // swap(ord[his[i].first],ord[his[i].second]); pair<int,int> aux = {-1,-1}; for(int i=0;i<n;i++) { if(final[i]!=i) { aux = {final[i],i}; break; } } if(aux.first!=-1) { sol[pas].first = unde[aux.first]; sol[pas].second = unde[aux.second]; int fx = ufin[aux.first], fy = ufin[aux.second]; swap(ufin[aux.first], ufin[aux.second]); swap(final[fx], final[fy]); } else sol[pas] = {0,0}; swap(unde[ord[sol[pas].first]], ord[sol[pas].second]); swap(ord[sol[pas].first], ord[sol[pas].second]); } for(int i=0;i<n;i++) ord[i] = init[i]; for(int pas=0;pas<=ult;pas++) { swap(ord[his[pas].first], ord[his[pas].second]); swap(ord[sol[pas].first], ord[sol[pas].second]); } /*for(int i=0;i<n;i++) cerr<<ord[i]<<" "; cerr<<" final\n";*/ return is_sorted(); } int findSwapPairs(int N, int copS[], int M, int X[], int Y[], int P[], int Q[]) { n = N; m = M; for(int i=0;i<N;i++) { init[i] = copS[i]; ord[i] = init[i]; } for(int i=0;i<M;i++) { his[i] = {X[i], Y[i]}; } if(is_sorted()) return 0; int st=0,dr=m-2,ans=m-1; while(st<=dr) { int mij=(st+dr)/2; if(verif(mij)) { ans = mij; dr = mij-1; } else st = mij+1; } assert(verif(ans)); for(int i=0;i<=ans;i++) { P[i] = sol[i].first; Q[i] = sol[i].second; } return ans+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...