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

    Color the ball

    Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 16486    Accepted Submission(s): 8203


    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
     
    Author
    8600
     
    Source
     
     
     
    解析:树状数组(区间更新,单点查询)。
     
     
     
    #include <cstdio>
    #include <cstring>
    #define lowbit(x) (x)&(-x)
    
    int n, a, b;
    int c[100005];
    
    void add(int i, int val)
    {
        while(i <= n){
            c[i] += val;
            i += lowbit(i);
        }
    }
    
    int sum(int i)
    {
        int ret = 0;
        while(i > 0){
            ret += c[i];
            i -= lowbit(i);
        }
        return ret;
    }
    
    int main()
    {
        while(scanf("%d", &n), n){
            memset(c, 0, sizeof(c));
            for(int i = 1; i <= n; ++i){
                scanf("%d%d", &a, &b);
                add(a, 1);
                add(b+1, -1);
            }
            for(int i = 1; i < n; ++i)
                printf("%d ", sum(i));
            printf("%d
    ", sum(n));
        }
        return 0;
    }
    

    由于题目输出是在所有操作完成之后才输出,故也可以直接得到前缀和输出。

    #include <cstdio>
    #include <cstring>
    
    int n, a, b;
    int c[100005];
    
    int main()
    {
        while(scanf("%d", &n), n){
            memset(c, 0, sizeof(c));
            for(int i = 1; i <= n; ++i){
                scanf("%d%d", &a, &b);
                ++c[a];
                --c[b+1];
            }
            for(int i = 1; i < n; ++i){
                c[i] += c[i-1];
                printf("%d ", c[i]);
            }
            c[n] += c[n-1];
            printf("%d
    ", c[n]);
        }
        return 0;
    }
    
  • 相关阅读:
    ios-pch文件的手动添加
    iOS远程消息推送自我整理版
    iOS远程消息推送
    苹果App store 2015最新审核标准公布(2015.3)
    App上线基本流程
    iOS中常用的正则表达式
    如何获取App当前版本号
    添加Appicon的方法
    键盘弹出
    iOS9适配中出现的一些常见问题
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5721653.html
Copyright © 2011-2022 走看看