您的位置:首页 > 其它

hdu 1556 Color the ball

2016-10-16 22:22 225 查看
Problemacm.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 位置及时消去

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: