Submission #56362

#TimeUsernameProblemLanguageResultExecution timeMemory
56362WA_TLESorting (IOI15_sorting)C++14
100 / 100
263 ms10192 KiB
#include<deque> #include<queue> #include<vector> #include<algorithm> #include<iostream> #include<set> #include<cmath> #include<tuple> #include<string> //#include<chrono> #include<functional> #include<iterator> #include<random> #include<unordered_set> #include<array> #include<map> #include<iomanip> #include<assert.h> #include<bitset> #include<stack> using namespace std; typedef long long int llint; typedef long double lldo; #define mp make_pair #define mt make_tuple #define pub push_back #define puf push_front #define pob pop_back #define pof pop_front #define fir first #define sec second #define res resize #define ins insert #define era erase /* cout<<setprecision(20) cin.tie(0); ios::sync_with_stdio(false); */ const llint mod=1e9+7; const llint big=2.19e15+1; const long double pai=3.141592653589793238462643383279502884197; const long double eps=1e-15; template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}} template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}} llint gcd(llint a,llint b){if(a%b==0){return b;}else return gcd(b,a%b);} //llint lcm(llint a,llint b){return a/gcd(a,b)*b;} template<class T> void SO(T& ve){sort(ve.begin(),ve.end());} template<class T> void REV(T& ve){reverse(ve.begin(),ve.end());} template<class T>llint LBI(vector<T>&ar,T in){return lower_bound(ar.begin(),ar.end(),in)-ar.begin();} template<class T>llint UBI(vector<T>&ar,T in){return upper_bound(ar.begin(),ar.end(),in)-ar.begin();} //やるだけ #include<sorting.h> int findSwapPairs(int N,int S[],int M,int X[],int Y[],int P[],int Q[]){ int bmax=M,bmin=-1,i; while(bmax-bmin>1){ int bgen=(bmax+bmin)/2; vector<int>hai(N); for(i=0;i<N;i++){hai[i]=S[i];} for(i=0;i<bgen;i++){swap(hai[X[i]],hai[Y[i]]);} //このswap数を求める int now=0; for(i=0;i<N;i++){ while(hai[i]!=i){ swap(hai[i],hai[hai[i]]); now++; } } if(now<=bgen){bmax=bgen;} else{bmin=bgen;} } //bmax回が答え //PとQをそろえる vector<int>hai(N); for(i=0;i<N;i++){hai[i]=S[i];} for(i=0;i<bmax;i++){swap(hai[X[i]],hai[Y[i]]);} //そろえるやつを番号で指定する //とりあえずPとQに格納 int now=0; for(i=0;i<N;i++){ while(hai[i]!=i){ P[now]=hai[i]; Q[now]=i; swap(hai[i],hai[hai[i]]); now++; } } while(now<bmax){P[now]=0;Q[now]=0;now++;} //for(i=0;i<bmax;i++){cerr<<P[i]<<" "<<Q[i]<<endl;} vector<int>doco(N); for(i=0;i<N;i++){hai[i]=i;doco[i]=i;} for(i=bmax-1;i>=0;i--){ P[i]=doco[P[i]];Q[i]=doco[Q[i]]; swap(hai[X[i]],hai[Y[i]]); swap(doco[hai[X[i]]],doco[hai[Y[i]]]); } //cerr<<bmax<<endl; return bmax; }
#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...