福州大学的1021.树状数组的应用。
现在感觉博客园的代码贴纸不算好~~
树状数组
1 #include<stdio.h>
2 #include<string.h>
3 #define MAXN 105
4 #define lowbit(x) ((x)&(-x))
5 typedef int elem_t;
6
7 struct sum{
8 elem_t a[MAXN],c[MAXN];
9 int n;
10 void init(int i){memset(a,0,sizeof(a));memset(c,0,sizeof(c));n=i;}
11 void update(int i,elem_t v)
12 {
13 for(a[i++]+=v;i<=n;c[i-1]+=v,i+=lowbit(i));
14 }
15 elem_t query(int i)
16 {
17 int ret;
18 for(ret=0;i;ret+=c[i-1],i^=lowbit(i));
19 return ret;
20 }
21 };
22 int main()
23 {
24 int n;
25 sum sTmp;
26 while(scanf("%d",&n)!=EOF&&n)
27 {
28 sTmp.init(100);
29 int sumt=0,i,j,x,temp;
30 for(i=0;i<n;i++)
31 {
32 scanf("%d%d",&temp,&x);
33 sTmp.update(x,1);
34 sumt+=sTmp.query(100)-sTmp.query(x+1);
35 sumt%=1000000;
36 //cout<<sumt<<endl;
37 }
38 printf("%d\n",sumt);
39 }
40 return 0;
41 }