Color the ball HDOJ--1556
2014-04-30 18:36
288 查看
Color the ball
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6609 Accepted Submission(s): 3468
[align=left]Problem Description[/align]
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
[align=left]Input[/align]
每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
当N = 0,输入结束。
[align=left]Output[/align]
每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
[align=left]Sample Input[/align]
3
1 1
2 2
3 3
3
1 1
1 2
1 3
0
[align=left]Sample Output[/align]
1 1 1
3 2 1
思路:线段树题目,感觉是时候学学线段树这种数据结构了,于是找了一题练练,一次AC,爽啊!
成断更新,单点查询!
AC代码:
#include<stdio.h> #define MAX 100001 typedef struct { int left; int right; int cover; }Node; Node ball[4*MAX]; int cnt; void build(int l,int r,int k) { int mid; if(l == r) { ball[k].left = l; ball[k].right = r; ball[k].cover = 0; return ; } ball[k].left = l; ball[k].right = r; ball[k].cover = 0; mid = (l+r) >> 1; build(l,mid,k << 1); build(mid+1,r,k << 1|1); } void insert(int l,int r,int k) { if(l == ball[k].left && r == ball[k].right) { ball[k].cover++; return ; } if(ball[k].right == ball[k].left) return ; int mid = (ball[k].left+ball[k].right) >> 1; if(r <= mid) insert(l,r,k << 1); else if(l > mid) insert(l,r,k << 1|1); else { insert(l,mid,k << 1); insert(mid+1,r,k << 1|1); } return ; } void search(int num,int k) { if(ball[k].left == ball[k].right) { cnt += ball[k].cover; return ; } cnt += ball[k].cover; int mid = (ball[k].left+ball[k].right) >> 1; if(num <= mid) search(num,k << 1); else search(num,k << 1|1); return ; } int main() { int n,i; int a,b; while(~scanf("%d",&n) && n) { build(1,n,1); for(i = 0;i < n;i ++) { scanf("%d%d",&a,&b); insert(a,b,1); } for(i = 1;i < n;i ++) { cnt = 0; search(i,1); printf("%d ",cnt); } cnt = 0; search(n,1); printf("%d\n",cnt); } return 0; }
相关文章推荐
- Color the ball----HDOJ1556
- hdoj 1556 Color the ball
- HDOJ 1556 Color the ball
- HDOJ-1556 Color the ball
- hdoj1556-Color the ball
- HDOJ 1556 Color the ball
- hdoj 1556 Color the ball【线段树区间更新】
- hdoj 1556 Color the ball 【线段树 + lazy区间更新】 【树状数组】
- HDOJ 1556 Color the ball(线段树 + 线状数组)
- 【HDOJ】1556 Color the ball
- HDOJ 1556 Color the ball(树状数组模板)
- HDOJ 1556 Color the ball (线段树+区间更新)
- HDOJ 1556 Color the ball(树状数组 & 线段树)
- hdoj-1556-Color the ball
- 【HDOJ】1556 Color the ball
- hdoj 1556 Color the ball 【树状数组】
- Color the ball----HDOJ1556
- HDOJ 1556 Color the ball(树状数组)
- hdoj 1556 Color the ball 【线段树】
- HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询