Submission #870737

#TimeUsernameProblemLanguageResultExecution timeMemory
870737ElioritaArranging Shoes (IOI19_shoes)C++14
10 / 100
1 ms448 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; int merge(int l,int mid,int r) { int cnt=0,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+=(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; } int mergesort(int l,int r) { int 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...