Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
merge144MS,不幸排在第一In Reply To:Merge 400MS 树状数组 500 MS。。。树状数组怎么这么慢。。 Posted by:zxy_snow at 2011-03-17 18:39:30 #include<stdio.h> #include<string.h> int a[500005],t[500005]; __int64 merge_sort(int l,int r,int len) { int i,temp,j; __int64 ans=0; if(len==0) return 0; temp=(l+r)/2; ans+=merge_sort(l,temp,temp-l); ans+=merge_sort(temp+1,r,r-temp-1); int p=l,q=temp+1; j=l; for(i=0;i<=len;i++) { if(q>r||(p<=temp&&a[p]<a[q])) t[j++]=a[p++]; else { ans+=temp-p+1; t[j++]=a[q++]; } } for(;l<=r;l++) a[l]=t[l]; return ans; } inline void scan(int &n) { char c; //while(c=getchar(),c<'0'||c>'9'); n=0; while(c=getchar(),c<='9'&&c>='0') n=n*10+c-'0'; } int main() { int n,i; __int64 ans; while(scanf("%d",&n),n) { getchar(); for(i=0;i<n;i++) scan(a[i]); ans=merge_sort(0,n-1,n-1); printf("%I64d\n",ans); } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator