hdu1541Stars(树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=1541

题被划在线段树里 刚开始想着是求区间k值 写着写着觉得错了 看着像求逆序数 写了个树状数组 怎么都过不了 无奈。。

View Code
 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 #define N 50000
 7 struct node
 8 {
 9     int x,y,p;
10 }s[N<<1];
11 int po[N<<1],re[N<<2],n,num[N<<1],w = N;
12 bool cmpp(struct node a,struct node b)
13 {
14     return a.x<b.x;
15 }
16 void add(int i,int da)
17  {
18      while(i<=w)
19      {
20         re[i]+=da;
21         i += i&(-i);
22      }
23  }
24  int getsum(int i)
25  {
26      int s = 0;
27      while(i)
28      {
29          s+=re[i];
30          i-=i&(-i);
31      }
32      return s;
33  }
34 int main()
35 {
36     int i,j,k;
37     while(~scanf("%d", &n))
38     {
39         memset(re,0,sizeof(re));
40         memset(num,0,sizeof(num));
41         for(i = 1; i <= n ; i++)
42         {
43             scanf("%d%d",&s[i].x,&s[i].y);
44             s[i].x++;
45             k = getsum(s[i].x);
46             num[k]++;
47             add(s[i].x,1);
48         }
49         for(i = 0 ; i < n ; i++)
50         printf("%d\n",num[i]);
51     }
52     return 0;
53 }

 

posted @ 2012-10-22 18:49  _雨  阅读(182)  评论(0编辑  收藏  举报