zoukankan      html  css  js  c++  java
  • hdu-1556 Color the ball---树状数组+区间修改单点查询

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1556

    题目大意:

    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个气球总共被涂色的次数。
     
    解题思路:
    裸的树状数组,但是是区间修改单点更新
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<set>
     4 #include<cstring>
     5 #include<cstdio>
     6 using namespace std;
     7 const int maxn = 100000 + 10;
     8 typedef long long ll;
     9 int tree[maxn];
    10 int n;
    11 int lowbit(int x)
    12 {
    13     return x & (-x);
    14 }
    15 //求第x个数字
    16 int sum(int x)
    17 {
    18     int ret = 0;
    19     while(x <= n)
    20     {
    21         ret += tree[x];
    22         x += lowbit(x);
    23     }
    24     return ret;
    25 }
    26 //在区间[1, x]加上d
    27 void add(int x, int d)
    28 {
    29     while(x > 0)
    30     {
    31         tree[x] += d;
    32         x -= lowbit(x);
    33     }
    34 }
    35 int main()
    36 {
    37     while(scanf("%d", &n) && n)
    38     {
    39         int x, y;
    40         memset(tree, 0, sizeof(tree));
    41         for(int i = 1; i <= n; i++)
    42         {
    43             scanf("%d%d", &x, &y);
    44             add(y, 1);
    45             add(x - 1, -1);
    46         }
    47         for(int i = 1; i <= n; i++)
    48         {
    49             int x = sum(i);
    50             printf("%d", x);
    51             if(i == n)printf("
    ");
    52             else printf(" ");
    53         }
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    redis 学习笔记三
    hadoop 家族图
    hbase 笔记
    spark history server
    利用Intellij IDEA构建spark开发环境
    自己安装的工具版本
    hive读书笔记
    数据仓库元数据
    Spark RDD
    pg mysql 比较
  • 原文地址:https://www.cnblogs.com/fzl194/p/8923274.html
Copyright © 2011-2022 走看看