首页 > 其他 > 详细

poj 3928 ping pong 树状数组

时间:2014-02-12 11:16:51      阅读:323      评论:0      收藏:0      [点我收藏+]

 

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<math.h>
 6 #define maxx 100002
 7 using namespace std;
 8 int a[20022],c[100022],x[100022],n,zuo[100022],you[100022];
 9 
10 int lowbit(int x)
11  {
12      return x&(-x);
13  }
14 
15  __int64 sum(int p)
16  {
17      __int64 ans=0;
18      while(p>0)
19      {
20          ans+=c[p];//printf("i %d   c %d  ans %d\n",p,c[p],ans);
21          p-=lowbit(p);
22      }
23      return ans;
24  }
25 
26  void update(int p)
27  {
28      while(p<=100010)       //!!!!!!!!!!!!!!!!不是p<=n
29      {
30          c[p]++;
31          p+=lowbit(p);
32      }
33 
34  }
35 int main()
36 {
37     int i,j,m,t;
38     scanf("%d",&t);
39     while(t--)
40     {
41         scanf("%d",&n);
42         for(i=1;i<=n;i++)
43             scanf("%d",&a[i]);
44 
45         memset(c,0,sizeof(c));
46         for(i=1;i<=n;i++)
47         {
48             zuo[i]=sum(a[i]);
49             update(a[i]);
50         }
51 
52         memset(c,0,sizeof(c));
53         for(i=n;i>=1;i--)
54         {
55             you[i]=sum(a[i]);
56             update(a[i]);
57         }
58         long long final=0;
59         for(i=1;i<=n;i++)
60         {
61             final+=(zuo[i]*(n-i-you[i]))+(you[i]*(i-zuo[i]-1));
62         }
63         printf("%lld\n",final);
64     }
65     return 0;
66 }
bubuko.com,布布扣

poj 3928 ping pong 树状数组

原文:http://www.cnblogs.com/assult/p/3545251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!