hdu 1556 Color the ball
2016-10-16 22:22
225 查看
Problem:acm.hdu.edu.cn/showproblem.php?pid=1556
题意:题目是说多次给区间 [ a ,b ] 的每一个气球涂一次色,最后问每一个气球分别总共被涂了多少次色
分析:在搜线段树专题 的时候在别人博客看到的一道题,说是线段树入门(见:blog.csdn.net/acm_davidcn/article/details/5834373)。然而,并没有写成 线段树,只是打了下标记。
用一个数组记录增量,每次读入一区间左、右端点后,左端点位置(记为a)的增量 +1,右端点位置(记为b)的下一个位置(b+1)的增量 -1
最后求和时,用一个变量 sum 累加各个位置的增量并输出
对每一个增量,作用域是 [ a ,b ] ,在 a 加1后,在 b+1 才减去,sum 在累计时在 a 位置收到的增量,会持续作用到 b 位置,而在 b+1 位置及时消去
题意:题目是说多次给区间 [ a ,b ] 的每一个气球涂一次色,最后问每一个气球分别总共被涂了多少次色
分析:在搜线段树专题 的时候在别人博客看到的一道题,说是线段树入门(见:blog.csdn.net/acm_davidcn/article/details/5834373)。然而,并没有写成 线段树,只是打了下标记。
用一个数组记录增量,每次读入一区间左、右端点后,左端点位置(记为a)的增量 +1,右端点位置(记为b)的下一个位置(b+1)的增量 -1
最后求和时,用一个变量 sum 累加各个位置的增量并输出
对每一个增量,作用域是 [ a ,b ] ,在 a 加1后,在 b+1 才减去,sum 在累计时在 a 位置收到的增量,会持续作用到 b 位置,而在 b+1 位置及时消去
#include <stdio.h> #include <string.h> #define N 100000 int add[N+2]; int main() { int n; while(~scanf("%d", &n) && n) { int i, sum; memset(add, 0, sizeof add); for(i=0; i<n; ++i) { int l, r; scanf("%d%d", &l, &r); // 左端点增量 ++add[l]; // 右端点下一位置减去 --add[r+1]; } // sum 边累加边输出 for(sum=0,i=1; i<=n; ++i) printf("%d%c", sum+=add[i], i==n?'\n':' '); } return 0; }
相关文章推荐
- hdu 1556 Color the ball
- HDU 1556 Color the ball - from lanshui_Yang
- HDU 1556 Color the ball
- HDU - 1556 Color the ball 区间更新
- hdu 1556 Color the ball (扫描线+树状数组)
- HDU 1556 Color the ball
- hdu 1556 Color the ball
- HDU 1556 Color the ball【线段树】
- HDU 1556 Color the ball(线段树)
- HDU - 1556 Color the ball (一维树状数组 + 区间修改 + 单点求值)
- hdu 1556 Color the ball(线段树的另一种应用)
- HDU 1556 Color the ball(树状数组,基础,气球染色问题)
- hdu 1556 Color the ball
- HDU-1556-Color the ball
- hdu 1556 Color the ball
- HDU 1556 color the ball
- HDU【1556】Color the ball
- HDU 1556 Color the Ball 线段树 题解
- HDU-1556-Color the ball-线段树+区间更新+单点查询
- HDU - 1556——Color the ball