Submission #1834

#TimeUsernameProblemLanguageResultExecution timeMemory
1834alephnull공장 (KOI13_factory)C++98
20 / 20
311 ms14488 KiB
#include <cstdio> #include <algorithm> using namespace std; long long merge(int *a,int *b,int n1,int n2,int *tmp){ long long ret=0; int i=0,ia=0,ib=0; while(ia<n1&&ib<n2){ if(a[ia]<=b[ib]) tmp[i++]=a[ia++]; else{ tmp[i++]=b[ib++]; ret+=n1-ia; } } while(ia<n1) tmp[i++]=a[ia++]; while(ib<n2){ tmp[i++]=b[ib++]; ret+=n1-ia; } return ret; } long long rev(int* a,int n){ if(n==1)return 0; long long ret=0; int a1[(n+1)/2],a2[n/2]; for(int i=0;i<(n+1)/2;i++)a1[i]=a[i]; for(int i=0;i<n/2;i++)a2[i]=a[(n+1)/2+i]; ret+=rev(a1,(n+1)/2); ret+=rev(a2,n/2); ret+=merge(a1,a2,(n+1)/2,n/2,a); return ret; } int main(){ int n;scanf("%d",&n); int a[n]; int b[n]; int* hash=new int[1000001]; int p[n]; for(int i=0;i<n;i++){ scanf("%d",a+i); hash[a[i]]=i; } for(int i=0;i<n;i++) scanf("%d",b+i); for(int i=0;i<n;i++) p[hash[b[i]]]=i; printf("%lld",rev(p,n)); }
#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...