随笔 - 32  文章 - 2  trackbacks - 0
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(3)

随笔档案

文章档案

搜索

  •  

积分与排名

  • 积分 - 8416
  • 排名 - 1249

最新评论

阅读排行榜

评论排行榜

又一道树状数组的题。注意坐标值有可能为0,会导致死循环,都加1就可以了。
 1 #include <iostream>
 2 using namespace std;
 3 int n;
 4 int star[15011][2];
 5 int num[15011];
 6 int t[40011];
 7 int ans[15011];
 8 
 9 int lowbit(int x){
10     return x&(-x);
11     }
12     
13 int sum(int x){
14     int re=0;
15     while (x>0){
16         re+=t[x];
17         x-=lowbit(x);
18         }
19     return re;
20     }
21 void insert(int x){
22     while (x<=32011){
23         ++t[x];
24         x+=lowbit(x);
25         }
26     }
27 
28 int main(){
29     srand(102323);
30     scanf("%d",&n);
31     for (int i=1;i<=n;++i) scanf("%d %d",&star[i][0],&star[i][1]);
32     for (int i=1;i<=n;++i){
33         num[i]=sum(star[i][0]+1);
34         insert(star[i][0]+1);
35         }
36     for (int i=1;i<=n;++i) ++ans[num[i]];
37     for (int i=0;i<n;++i) printf("%d\n",ans[i]);
38     }
39 

posted on 2008-11-10 20:38 Joseph 阅读(295) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理