zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    js在html中的加载执行顺序
    外部JS的阻塞下载
    mysql 中文字段排序
    PHP 多维数组排序 array_multisort()
    最简单的Linux下apache+mysql+php安装
    [TJOI2008] 彩灯 (线性基)
    [洛谷P2257] YY的GCD (莫比乌斯反演)
    [SDOI2015] 约数个数和 (莫比乌斯反演)
    [POI2007] ZAP-Queries (莫比乌斯反演)
    [NOI2003] 文本编辑器 (splay)
  • 原文地址:https://www.cnblogs.com/xiaozhuyang/p/hdu1556.html
Copyright © 2011-2022 走看看