关闭

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

452人阅读 评论(0) 收藏 举报
分类:
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;
}

1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:257103次
    • 积分:7127
    • 等级:
    • 排名:第3140名
    • 原创:436篇
    • 转载:0篇
    • 译文:0篇
    • 评论:60条
    博客专栏
    最新评论