Submission #415276

#TimeUsernameProblemLanguageResultExecution timeMemory
415276TLP39Sorting (IOI15_sorting)C++14
100 / 100
163 ms26804 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; typedef pair<int,int> pp; int n,m; int state=0; int pos[200010]; int s[200010]; int sw[600010][2]; bool ch[200010]; int ans; vector<pp> pq; void swaps(int p1,int p2) { int temp=s[p1]; s[p1]=s[p2]; s[p2]=temp; } void change_to_state(int st) { while(state<st) { state++; swaps(sw[state][0],sw[state][1]); } while(state>st) { swaps(sw[state][0],sw[state][1]); state--; } } int count_cycle() { for(int i=0;i<n;i++) ch[i]=false; int cycle_num=0,cur; for(int i=0;i<n;i++) { if(ch[i]) continue; cycle_num++; ch[i]=true; cur=s[i]; while(cur!=i) { ch[cur]=true; cur=s[cur]; } } return cycle_num; } void find_ans() { int hi=m,low=0,av; while(hi>low) { av=(hi+low)>>1; change_to_state(av); if(count_cycle()+av>=n) hi=av; else low=av+1; } ans=hi; return; } void get_pq() { change_to_state(ans); for(int i=0;i<n;i++) { while(s[i]!=i) { pq.push_back({i,s[i]}); swaps(i,s[i]); } } while(pq.size()<ans) { pq.push_back({1,1}); } } void change_pq() { for(int i=0;i<n;i++) pos[i]=i; int temp; for(int i=ans-2;i>=0;i--) { swaps(pos[sw[i+2][0]],pos[sw[i+2][1]]); temp=pos[sw[i+2][0]]; pos[sw[i+2][0]]=pos[sw[i+2][1]]; pos[sw[i+2][1]]=temp; pq[i]={s[pq[i].first],s[pq[i].second]}; } } 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++) { sw[i+1][0]=X[i]; sw[i+1][1]=Y[i]; } find_ans(); get_pq(); change_pq(); for(int i=0;i<ans;i++) { P[i]=pq[i].first; Q[i]=pq[i].second; } return ans; }

Compilation message (stderr)

sorting.cpp: In function 'void get_pq()':
sorting.cpp:80:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   80 |     while(pq.size()<ans)
      |           ~~~~~~~~~^~~~
#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...