zoukankan      html  css  js  c++  java
  • hdu 1556 Color the ball

    Problem Description
    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
     
    Input
    每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
    当N = 0,输入结束。
     
    Output
    每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
     
    Sample Input
    3
    1 1
    2 2
    3 3
    3
    1 1
    1 2
    1 3
    0
     
    Sample Output
    1 1 1
    3 2 1
    这题是基本的线段树的应用,就不多说了。
    #include<stdio.h>
    typedef struct{
        int l,r;
        int count;//记录这段线段的数目
    }point;
    point tree[300001];
    int ans;
    void build(int v,int l,int r)//建树
    {
        tree[v].l=l;
        tree[v].r=r;
        tree[v].count=0;
        if(l==r) return ;
        int mid=(l+r)/2;
        build(2*v,l,mid);
        build(2*v+1,mid+1,r);
    }
    void update(int v,int l,int r)//添加线段
    {
        if(tree[v].l==l&&tree[v].r==r)
        {
            tree[v].count++;
            return ;
        }
        int mid=(tree[v].l+tree[v].r)/2;
        if(mid>=r) update(2*v,l,r);
        else if(l>mid) update(2*v+1,l,r);
        else {
            update(2*v,l,mid);
            update(2*v+1,mid+1,r);
        }
    }
    void query(int v,int d)
    {
        ans+=tree[v].count;
        if(tree[v].l==tree[v].r) return ;
        int mid=(tree[v].l+tree[v].r)/2;
        if(d<=mid) query(2*v,d);
        else query(2*v+1,d);
    }
    int main()
    {
        int n,a,b,i;
        while(scanf("%d",&n)&&n)
        {
            build(1,1,n);
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&a,&b);
                update(1,a,b);
            }
            for(i=1;i<n;i++)
            {
                query(1,i);
                printf("%d ",ans);
                ans=0;
            }
            query(1,n);
            printf("%d
    ",ans);
            ans=0;
        }
        return 0;
    }
            
  • 相关阅读:
    HashMap的理解
    红黑树
    No constructor found matching
    会话 控制终端 setsid
    信息表示和处理 from computer system chapter 2
    tcp keepalive
    TCP 四步挥手
    CS 课程
    close vs shutdown socket
    Linux time总结
  • 原文地址:https://www.cnblogs.com/duan-to-success/p/3649404.html
Copyright © 2011-2022 走看看