第一道树状数组,树状数组下表由1开始
1 #include<stdio.h> 2 #include<string.h> 3 #define max 32050 4 int c[max],level[15010]; 5 6 int sum(int k) 7 { 8 int total=0; 9 while(k>0) 10 { 11 total+=c[k]; 12 k-=k&(-k); 13 } 14 return total; 15 } 16 17 int add(int k,int d) 18 { 19 while(k<max) 20 { 21 c[k]+=d; 22 k+=k&(-k); 23 } 24 } 25 26 int main() 27 { 28 int n; 29 while(~scanf("%d",&n)) 30 { 31 memset(c,0,sizeof(c)); 32 memset(level,0,sizeof(level)); 33 for(int i=0;i<n;i++) 34 { 35 int x,y; 36 scanf("%d%d",&x,&y); 37 x++; 38 level[sum(x)]++; 39 add(x,1); 40 } 41 for(int i=0;i<n;i++) 42 printf("%d\n",level[i]); 43 } 44 return 0; 45 }