hdu1556-color the ball 线段树
2016-08-13 17:38
381 查看
1556
[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 //第一个气球被涂1次颜色 第二个气球被涂2次颜色 第三个气球被涂3次颜色
3 2 1
转自 点击打开链接
[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 //第一个气球被涂1次颜色 第二个气球被涂2次颜色 第三个气球被涂3次颜色
3 2 1
#include <iostream> #include <stdio.h> using namespace std; #define MAXN 100010 struct Node{ int L,R; int val; //被涂过的次数 }; Node a[MAXN*3+1]; void Init(int d,int l,int r) //初始化线段树 { if(l==r){ //递归出口 a[d].L = l; a[d].R = r; a[d].val = 0; return ; } //初始化当前节点 a[d].L = l; a[d].R = r; a[d].val = 0; //递归初始化孩子节点 int mid = (l+r)/2; Init(d*2,l,mid); Init(d*2+1,mid+1,r); } void Update(int d,int l,int r) //更新某一区间的值 { if(a[d].L==l && a[d].R==r){ //递归出口。找到区间 a[d].val++; return ; } if(a[d].L==a[d].R) //递归出口。没有找到 return ; //没找到 int mid = (a[d].L+a[d].R)/2; if(mid>=r){ //去左孩子找 Update(d*2,l,r); } else if(mid<l){ //去右孩子找 Update(d*2+1,l,r); } else { //中点在要查询区间的中间,两边都要找 Update(d*2,l,mid); Update(d*2+1,mid+1,r); } } int Query(int d,int l,int r) //查询 { if(a[d].L==l && a[d].R==r) //找到区间 return a[d].val; if(a[d].L==a[d].R) return 0; int mid = (a[d].L+a[d].R)/2; if(mid>=r){ //去左孩子找 return a[d].val + Query(d*2,l,r); } else if(mid<l){ //去右孩子找 return a[d].val + Query(d*2+1,l,r); } else { //中点在要查询区间的中间,两边都要找 return a[d].val + Query(d*2,l,mid) + Query(d*2+1,mid+1,r); } } int main() { int N,A,B,i,sum; while(scanf("%d",&N)!=EOF && N){ Init(1,1,N); for(i=1;i<=N;i++){ //输入并更新线段树 scanf("%d%d",&A,&B); Update(1,A,B); } for(i=1;i<=N;i++){ //输出每一个气球被涂过的次数 sum = Query(1,i,i); printf("%d",sum); if(i!=N) printf(" "); } printf("\n"); } return 0; }
转自 点击打开链接
相关文章推荐
- HDU1556:Color the ball(线段树区间更新)
- HDU1556:Color the ball(线段树区间更新单点求值)&&树状数组解法
- hdu1556 Color the ball 线段树
- Color the ball(hdu1556)(hash)或(线段树,区间更新)
- hdu1556 Color the ball【树状数组 || 线段树 || 技巧*区间修改】
- HDU1556:Color the ball(简单的线段树区域更新)
- HDU1556:Color the ball(线段树区间更新)
- hdu1556 Color the ball 线段树区间染色问题
- hdu1556 Color the ball(线段树区间更新)
- HDU1556 Color the ball 解题报告--线段树
- 数据结构之线段树 入门HDU1556 color the ball
- HDU1556 Color the ball(线段树区间更新)
- hdu1556 Color the ball 线段树,成段更新水题
- hdu1556 Color the ball 简单线段树
- HDU1556 Color the ball(线段树)
- Color the ball(hdu1556)(hash)或(线段树,区间更新)
- HDU1556 - Color the ball (线段树超时 利用数组解决)
- hdu1556 Color the ball(线段树区间更新)
- hdu1556 Color the ball(线段树区间修改)
- hdu1556 Color the ball 线段树