Submission #197507

#TimeUsernameProblemLanguageResultExecution timeMemory
197507handlenameSorting (IOI15_sorting)C++17
100 / 100
337 ms28352 KiB
#include <bits/stdc++.h> #include "sorting.h" using namespace std; int n,m; pair<int,int> brr[600001]; int ori[200001],arr[200001],pos[200001]; vector<pair<int,int> > val; bool works(int k){ val.clear(); for (int i=0;i<n;i++) arr[i]=ori[i]; for (int i=0;i<k;i++) swap(arr[brr[i].first],arr[brr[i].second]); for (int i=0;i<n;i++){ pos[arr[i]]=i; } for (int i=0;i<n;i++){ if (arr[i]!=i){ int one=i; int two=pos[i]; swap(arr[one],arr[two]); val.push_back(make_pair(arr[one],arr[two])); pos[i]=i; pos[arr[two]]=two; } } if (val.size()>k) return false; while (val.size()<k) val.push_back(make_pair(0,0)); return true; } 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++) ori[i]=S[i]; for (int i=0;i<m;i++) brr[i]=make_pair(X[i],Y[i]); int mini=-1,maxi=m; while (mini+1<maxi){ int mid=(mini+maxi)/2; if (works(mid)) maxi=mid; else mini=mid; } works(maxi); for (int i=0;i<n;i++) arr[i]=ori[i]; for (int i=0;i<n;i++) pos[arr[i]]=i; for (int i=0;i<maxi;i++){ int a=X[i]; int b=Y[i]; swap(arr[a],arr[b]); swap(pos[arr[a]],pos[arr[b]]); int one=val[i].first; int two=val[i].second; a=pos[one]; b=pos[two]; P[i]=a; Q[i]=b; swap(pos[arr[a]],pos[arr[b]]); swap(arr[a],arr[b]); } return maxi; }

Compilation message (stderr)

sorting.cpp: In function 'bool works(int)':
sorting.cpp:25:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (val.size()>k) return false;
         ~~~~~~~~~~^~
sorting.cpp:26:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while (val.size()<k) val.push_back(make_pair(0,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...