hdoj 1556 Color the ball【线段树区间更新】
Color the ball
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 13072 Accepted Submission(s):
6537
b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
<= a <= b <= N)。
当N = 0,输入结束。
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
#define MAX 100010
#define INF 0x3f3f3f
int n,m;
int sum[MAX<<2];//记录每个区间的值,即每个气球被标记的次数
int add[MAX<<2];//记录每个对应区间的每个数的值
int ans;
void pushup(int o)//向上传递用来更新每一次被标记区间的值 的改变
{
sum[o]=sum[o<<1]+sum[o<<1|1];
}
void pushdown(int o,int m)//向下传递
{
if(add[o])
{
add[o<<1]+=add[o];
add[o<<1|1]+=add[o];
sum[o<<1]+=add[o]*(m-(m>>1));//线段树左分支的区间长度等于右分支或者比右分支大1
sum[o<<1|1]+=add[o]*(m>>1);
add[o]=0;
}
}
void gettree(int o,int l,int r)//建树
{
sum[o]=add[o]=0;
if(l==r)
return ;
int mid=(l+r)>>1;
gettree(o<<1,l,mid);
gettree(o<<1|1,mid+1,r);
pushup(o);
}
void update(int o,int l,int r,int L,int R)
{
if(L<=l&&R>=r)
{
add[o]+=1;
sum[o]+=1*(r-l+1);
return ;
}
pushdown(o,r-l+1);
int mid=(l+r)>>1;
if(L <= mid)
update(o<<1, l, mid, L ,R);
if(R > mid)
update(o<<1|1, mid+1, r, L ,R);
pushup(o);//维护区间的值
}
int find(int o,int l,int r,int L,int R)//查找每个气球被修改次数并输出
{
if(L<=l&&R>=r)
{
return sum[o];
}
pushdown(o,r-l+1);
int ans=0;
int mid=(r+l)>>1;
if(L<=mid)
ans+=find(o<<1,l,mid,L,R);
if(R>mid)
ans+=find(o<<1|1,mid+1,r,L,R);
return ans;
}
int main()
{
int i,j,a,b;
while(scanf("%d",&n),n)
{
gettree(1,1,n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
update(1,1,n,a,b);
}
for(i=1;i<=n;i++)
{
if(i>1)
printf(" ");
printf("%d",find(1,1,n,i,i));
}
printf("\n");
}
return 0;
}
hdoj 1556 Color the ball【线段树区间更新】的更多相关文章
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hdu 1556 Color the ball 线段树 区间更新
水一下 #include <bits/stdc++.h> #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 ...
- hdu 1556 Color the ball(线段树区间维护+单点求值)
传送门:Color the ball Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/3276 ...
- Color the ball 线段树 区间更新但点查询
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...
- hdu1556Color the ball线段树区间更新
题目链接 线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止) ...
- hdu 1556 Color the ball (线段树+代码详解)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 1556 Color the Ball 线段树 题解
本题使用线段树自然能够,由于区间的问题. 这里比較难想的就是: 1 最后更新须要查询全部叶子节点的值,故此须要使用O(nlgn)时间效率更新全部点. 2 截取区间不能有半点差错.否则答案错误. 这两点 ...
- hdu 1556 Color the ball 线段树
题目链接:HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气 ...
- hdu1556 Color the ball 线段树区间染色问题
都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...
随机推荐
- react组件什么周期记录,转的
react 的核心除了虚拟DOM,我想还有一个很重要的就是生命周期函数,理解生命周期函数,对写出合理的commponet很有帮助.下面总结一下我对生命周期函数的一些理解已经在项目过程中遇到的一些问题. ...
- yii2源码学习笔记(十九)
view剩余代码 /** * @return string|boolean the view file currently being rendered. False if no view file ...
- python之PIL安装问题
··在windows安装模块 总是出现问题,今天安装PIL的 首先提示我的是pip命令出错,这应该是当你安装Python2.7的时候 并没有把pip模块添加进去 导致出现了这样的一个问题,为了省事,我 ...
- MySQL数据库的热备份和冷备份
冷备份(off, 慢, 时间点上恢复)冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库.冷备份是将关键性文件拷贝到另外位置的一种说法.对于备份数据库信息而言,冷备份是最 ...
- C语言学习总结(一) 基本语法
第一章--C语言的基本概念 丹尼斯 里奇 一.什么是C语言? 定义:是一个面向过程的计算机高级语言--不需要任何运行环境便能运行的程序语言: 发展:目前是C11 (K&R C—> ...
- Unreal Engine4 蓝图讲解
UE4开发群:344602753 Unread Engine4的界面概况: UE4的效果可以说是比较好的,从整体架构上来说,和Unity3d的逻辑架构不太 一样,发现UE4不好上手,但是从理论上考虑, ...
- 【网络流24题】No.18 分配问题 (二分图最佳匹配 费用流|KM)
[题意] 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为 cij . 试设计一个将n 件工作分配给 n 个人做的分配方案, 使产生的总效益最大. 输入文件示例input. ...
- 【HDU 4276】The Ghost Blows Light(树形DP,依赖背包)
The Ghost Blows Light Problem Description My name is Hu Bayi, robing an ancient tomb in Tibet. The t ...
- 详解如何用AD 生成Gerber文件
以上gerber文件就出完了; 下面步骤是:进行导出" 钻孔文件 ". 以上钻孔文件就出完了; 到此就全部完成输出了. 下面的操作,也可以不用导的 .下面步骤是:进行导出&qu ...
- Android Training精要(四) Intent注意事项
判断有处理Intent的Activity PackageManager packageManager = getPackageManager(); List<ResolveInfo> ac ...