HDU - 1556 Color the ball (线段树 + 区间更新)

原创 2015年07月07日 15:15:04
C - Color the ball
Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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个气球总共被涂色的次数。
 

Sample Input

3 1 1 2 2 3 3 3 1 1 1 2 1 3 0
 

Sample Output

1 1 1 3 2 1
 
/*
Author:2486
Memory: 3468 KB		Time: 998 MS
Language: G++		Result: Accepted
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=100000+5;
int sum[maxn<<2],col[maxn<<2];
int N,a,b;
void pushup(int rt) {
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void pushdown(int rt,int m) {
    if (col[rt]) {
        col[rt<<1] += col[rt];
        col[rt<<1|1] += col[rt];
        sum[rt<<1] +=col[rt] * (m - (m >> 1));
        sum[rt<<1|1] += col[rt] * (m >> 1);
        col[rt] = 0;
    }
}
void build(int rt,int l,int r) {
    col[rt]=0;
    if(l==r) {
        sum[rt]=0;
        return;
    }
    int mid=(l+r)>>1;
    build(rt<<1,l,mid);
    build(rt<<1|1,mid+1,r);
}

void update(int L,int R,int c,int rt,int l,int r)
{
    if(L<=l&&r<=R){
        col[rt]+=c;
        sum[rt]+=c*(r-l+1);
        return ;
    }
    pushdown(rt,r-l+1);
    int mid=(l+r)>>1;
    if(L<=mid)update(L,R,c,rt<<1,l,mid);
    if(mid<R)update(L,R,c,rt<<1|1,mid+1,r);
    pushup(rt);
}
int query(int L,int R,int rt,int l,int r)
{
    if(L<=l&&r<=R){
        return sum[rt];
    }
    pushdown(rt,r-l+1);
    int mid=(l+r)>>1;
    int ret=0;
    if(mid>=L)ret+=query(L,R,rt<<1,l,mid);
    if(mid<R)ret+=query(L,R,rt<<1|1,mid+1,r);
    return ret;
}

int main() {
    #ifndef ONLINE_JUDGE
    freopen("D://imput.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(~scanf("%d",&N),N) {
        build(1,1,N);
        for(int i=0; i<N; i++) {
            scanf("%d%d",&a,&b);
            update(a,b,1,1,1,N);
        }
        for(int i=1;i<=N;i++){
            if(i!=1)printf(" ");
            printf("%d",query(i,i,1,1,N));
        }
    printf("\n");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU1556 color the ball【树状数组】解题报告

转载请注明原文地址:http://blog.csdn.net/huang8579/article/details/8770743 关于树状数组是什么? 请参照百度百科:http://baike...
  • huang8579
  • huang8579
  • 2013年04月08日 10:56
  • 3604

HDU 1556 Color the ball 线段树 区间更新

原题: http://acm.hdu.edu.cn/showproblem.php?pid=1556#include #include"cstdio" #include"string.h" usi...
  • qq_27508477
  • qq_27508477
  • 2015年08月12日 13:33
  • 223

HDU~1556 Color the ball(线段树区间更新||树状数组)

Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...
  • m0_37134257
  • m0_37134257
  • 2017年04月28日 16:21
  • 211

HDU1556 - 线段树基础

Question: 给出一个序列,我们每次都可以给一段子序列进行一次操作 序列的数据量是n(n Solution: 首先,为了更好的理解我们的线段树的优化措施 我们先来考虑一下我们的朴素的做...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年10月07日 15:09
  • 645

HDU 1556 Color the ball(线段树区间更新)

原题地址 Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O...
  • Lulu11235813
  • Lulu11235813
  • 2016年11月02日 15:00
  • 128

HDU 1556 Color the ball (线段树|树状数组,区间更新)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目: Problem Description N个气球排成一排,...
  • shuangde800
  • shuangde800
  • 2012年11月14日 18:53
  • 669

HDU 1556 Color the ball(线段树区间更新)

Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...
  • xky140610205
  • xky140610205
  • 2016年08月04日 16:02
  • 2490

HDU 3577 Fast Arrangement(线段树功能:区间更新,查询区间的最大覆盖次数)

HDU 3577 Fast Arrangement(线段树功能:区间更新,查询区间的最大覆盖次数)
  • u012860063
  • u012860063
  • 2015年09月01日 10:31
  • 755

HDU - 1556 Color the ball 区间更新

简单区间更新的小技巧 #include #include int n,a[100007]; int main() { while(scanf("%d",&n) != EOF && n) { ...
  • xiang_6
  • xiang_6
  • 2017年09月02日 17:17
  • 124

HDU 1156 Color the ball (线段树 区间更新)

HDU 1156 Color the ball (线段树 区间更新)
  • Tc_To_Top
  • Tc_To_Top
  • 2015年11月25日 18:52
  • 603
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU - 1556 Color the ball (线段树 + 区间更新)
举报原因:
原因补充:

(最多只允许输入30个字)