hdu1556 Color the ball 简单线段树

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

简单的线段树的应用

直接贴代码了:

代码:

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #define maxn 100100
 6 using namespace std;
 7 class node
 8 {
 9    public:
10    int  l;
11    int  r;
12    int add;
13 };
14 int n;
15 node segTree[maxn*3];
16 int ans[maxn];
17 void Build(int num ,int l,int r)
18 {
19    segTree[num].l=l;segTree[num].r=r;
20    segTree[num].add=0;
21    if(l==r) return ;
22    int mid=(l+r)/2;
23    Build(num*2,l,mid);
24    Build(num*2+1,mid+1,r);
25 }
26 void Update(int num,int l,int r)
27 {
28     if(segTree[num].l ==l && segTree[num].r==r)
29     {
30         segTree[num].add+=1;
31         return ;
32     }
33     int mid=(segTree[num].l + segTree[num].r)/2;
34     if(segTree[num].add)
35     {
36         segTree[num*2].add+=segTree[num].add;
37         segTree[num*2+1].add+=segTree[num].add;
38         segTree[num].add=0;
39     }
40     if(r<=mid ) Update(num*2,l,r);
41     else if(l>mid) Update(num*2+1,l,r);
42     else
43         {
44             Update(num*2,l,mid);
45             Update(num*2+1,mid+1,r);
46         }
47 }
48 void Answer(int num)
49 {
50     if(segTree[num].l == segTree[num].r)
51            {ans[segTree[num].l]=segTree[num].add; return ;}
52     if(segTree[num].add)
53     {
54         segTree[num*2].add+=segTree[num].add;
55         segTree[num*2+1].add+=segTree[num].add;
56         segTree[num].add=0;
57     }
58     
59    Answer(num*2);
60    Answer(num*2+1);
61 }
62 int main()
63 {
64     while(scanf("%d",&n)!=EOF && n)
65     {
66        memset(ans,0,sizeof(ans));
67     
68        Build(1,1,n);
69        int l,r;
70        for(int i=1;i<=n;i++)
71        {
72             scanf("%d%d",&l,&r);
73             Update(1,l,r);
74        }
75        Answer(1);
76        cout<<ans[1];
77        for(int i=2;i<=n;i++)
78           cout<<" "<<ans[i];
79           cout<<endl;
80     }
81     return 0;
82 }

 

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

导航