| ||||||||||
| 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 | |||||||||
Re:树状数组C++,为什么WA??In Reply To:树状数组C++,为什么WA?? Posted by:zhu1650465459 at 2015-08-22 14:30:20 > #include<cstdio>
> #include<iostream>
> #include<cstring>
> #include<cstdlib>
> using namespace std;
> struct node
> {
> int x,y;
> }a[500005];
> int l[500005],r[500005],n;
> int cmp(const void *x1,const void *x2)
> {
> node n1=*(node *)x1;
> node n2=*(node *)x2;
> if(n1.x!=n2.x) return n1.x-n2.x;
> else return n1.y-n2.y;
> }
> int lowbit(int x)
> {
> return x & -x;
> }
> void gaibian(int x)
> {
> while (x<=n)
> {
> l[x]+=1;
> x+=lowbit(x);
> }
> }
> int qiuhe(int x)
> {
> int ans=0;
> while(x>0)
> {
> ans+=l[x];
> x-=lowbit(x);
> }
> return ans;
> }
> int main()
> {
> int i; long long ans=0;
> while(scanf("%d",&n)!=EOF)
> {
> if(n==0) break;
> for(i=1;i<=n;i++)
> {
> scanf("%d",&a[i].x);
> a[i].y=i;
> }
> qsort(a+1,n,sizeof(node),cmp);
> for(i=1;i<=n;i++) r[a[i].y]=i;
> for(i=1;i<=n;i++) l[i]=0;
> for(i=1;i<=n;i++)
> {
> gaibian(r[i]);
> ans+=i-qiuhe(r[i]);
> }
> printf("%I64d\n",ans);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator