hdu1556 Color the ball

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556

思路:

我自己是用线段树做的

后来看了kuangbin的博客,发现用树状数组更简单,而且很妙,就自己也敲了一下

对于会树状数组的同学来说理解代码应该很简单,直接贴代码了啊

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<string>
 4 #include<iostream>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 const int MAXN=100010;
 9 int c[MAXN];
10 int n;
11 
12 int lowbit(int x)
13 {
14     return x&(-x);
15 }
16 void add(int i,int val)
17 {
18     while(i<=n)
19     {
20         c[i]+=val;
21         i+=lowbit(i);
22     }
23 }
24 int sum(int i)
25 {
26     int s=0;
27     while(i>0)
28     {
29         s+=c[i];
30         i-=lowbit(i);
31     }
32     return s;
33 }
34 int main()
35 {
36     int a,b;
37     while(scanf("%d",&n),n)
38     {
39         memset(c,0,sizeof(c));
40         for(int i=0;i<n;i++)
41         {
42             scanf("%d%d",&a,&b);
43             add(a,1);
44             add(b+1,-1);
45         }
46         for(int i=1;i<n;i++)
47          cout<<sum(i)<<" ";
48          cout<<sum(n)<<endl;
49     }
50     return 0;
51 }

 

posted on 2013-10-04 10:59  GyyZyp  阅读(162)  评论(0编辑  收藏  举报

导航