Submission #870740

#TimeUsernameProblemLanguageResultExecution timeMemory
870740ElioritaArranging Shoes (IOI19_shoes)C++14
10 / 100
1 ms600 KiB
#include "shoes.h" #include <algorithm> #include <iostream> #include <vector> using namespace std; const int N=200001; typedef pair<int,int> ii; typedef pair<double,double> dd; int n,c[N],temp[N],nxt[N][2],pr[N],cnt; long long merge(int l,int mid,int r) { long long cnt=0; int i=l,j=mid,k=l; while((i<=mid-1)&&(j<=r)) { if(c[i]<=c[j]) temp[k++]=c[i++]; else { temp[k++]=c[j++]; cnt+=1ll*(mid-i); } } while(i<=mid-1) temp[k++]=c[i++]; while(j<=r) temp[k++]=c[j++]; for(int i=l;i<=r;i++) c[i]=temp[i]; return cnt; } long long mergesort(int l,int r) { long long cnt=0; if(l<r) { int mid=(l+r)/2; cnt+=mergesort(l,mid); cnt+=mergesort(mid+1,r); cnt+=merge(l,mid+1,r); } return cnt; } long long count_swaps(std::vector<int> s) { n=s.size()/2; for(int i=2*n-1;i>=0;i--) { if(s[i]<0) { if(!nxt[-s[i]][1]) nxt[-s[i]][0]=i; else { pr[i]=nxt[-s[i]][1]; nxt[-s[i]][1]=0; } } else { if(!nxt[s[i]][0]) nxt[s[i]][1]=i; else { pr[i]=nxt[s[i]][0]; nxt[s[i]][0]=0; } } } for(int i=0;i<2*n;i++) { if(pr[i]!=0) { c[i]=++cnt; c[pr[i]]=++cnt; if(s[i]>0) swap(c[i],c[pr[i]]); } } return mergesort(0,2*n-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...