hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8984 Accepted Submission(s): 4594
当N = 0,输入结束。
Update(a,);
Update(b+,-);
注意更新a的值就相当于更新区间[a,n]的值(n为限界/因为a要更新往后的所有区间的值),那么更新b+1的值就是更新[b+1,n](更新b往后所有区间的值)。
所以将区间[a,n]值+1,再将无关区间[b+1,n]的值-1,最后就是将区间[a,b]的值+1。
下面是第二类树状数组的实现的两种方式:
代码一(向上更新,向下求和):
#include <iostream>
using namespace std; int n; //限界
int c[]; int lowbit(int x)
{
return x&-x;
} void Update(int x,int v) //更新区间[x,n]的值
{
while(x<=n){
c[x]+=v;
x+=lowbit(x);
}
} int Sum(int x) //求x之前的和
{
int sum = ;
while(x>){
sum+=c[x];
x-=lowbit(x);
}
return sum;
} int main()
{
int a,b,i;
while(scanf("%d",&n)!=EOF){
memset(c,,sizeof(c));
if(n==) break;
for(i=;i<n;i++){
scanf("%d%d",&a,&b);
Update(a,); //将区间[a,n]的值+1,再将无关区间[b+1,n]的值-1,即将区间[a,b]的值+1
Update(b+,-);
}
for(i=;i<=n;i++){
printf("%d",Sum(i)); //求单个的点直接求sum
if(i<n)
printf(" ");
}
printf("\n");
}
return ;
}
代码二(向下更新,向上求和):
#include <iostream>
using namespace std; int n; //限界
int c[]; int lowbit(int x)
{
return x&-x;
} void Update(int x,int v) //更新区间[x,n]的值
{
while(x>){
c[x]+=v;
x-=lowbit(x); //改动,+变成了-,向下更新
}
} int Sum(int x) //求x之前的和
{
int sum = ;
while(x<=n){
sum+=c[x];
x+=lowbit(x); //改动,-变成了+,向上求和
}
return sum;
} int main()
{
int a,b,i;
while(scanf("%d",&n)!=EOF){
memset(c,,sizeof(c));
if(n==) break;
for(i=;i<n;i++){
scanf("%d%d",&a,&b);
Update(a-,-); //将区间[1,a-1]的值-1,再将无关区间[1,b]的值+1,即将区间[a,b]的值+1
Update(b,);
}
for(i=;i<=n;i++){
printf("%d",Sum(i)); //求单个的点直接求sum
if(i<n)
printf(" ");
}
printf("\n");
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)的更多相关文章
- HDU 1556 Color the ball (一维树状数组,区间更新,单点查询)
中文题,题意就不说了 一开始接触树状数组时,只知道“单点更新,区间求和”的功能,没想到还有“区间更新,单点查询”的作用. 树状数组有两种用途(以一维树状数组举例): 1.单点更新,区间查询(即求和) ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?
开心.jpg J.farm 先解释一下题意,题意就是一个n*m的矩形区域,每个点代表一个植物,然后不同的植物对应不同的适合的肥料k,如果植物被撒上不适合的肥料就会死掉.然后题目将每个点适合的肥料种类( ...
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...
- HDU 1556 Color the ball(线段树:区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...
- HDU 1556 Color the ball (树状数组区间更新)
水题,练习一下树状数组实现区间更新. 对于每个区间,区间左端点+1,右端点的后一位-1,查询每个位置的覆盖次数 #include <cstdio> #include <cstring ...
- HDU 1556 线段树/树状数组/区间更新姿势 三种方法处理
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
随机推荐
- BZOJ 1355: [Baltic2009]Radio Transmission
Description 一个字符串最短周期. Sol KMP. 最短周期就是 \(n-next[n]\) 证明: 当该字符串不存在周期的时候 \(next[n]=0\) 成立. 当存在周期的时候 \( ...
- 网页嵌入swf代码
<object class id="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://dow ...
- memcache的带图形界面监控工具memcachephp
memcache也有一款图形界面的监控工具(memcachephp),可以通过这个工具查看到局域网内所有部署memcache机器或者端口的memcache的运行情况,对我们监控memcache的缓存命 ...
- 【leetcode】Insert Interval
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...
- ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!
通过ansible执行远程命令时报如下异常: Error: ansible requires the stdlib json or simplejson module, neither was fou ...
- 关于Intent ,Task, Activity的理解
看到一篇好文章,待加工 http://hi.baidu.com/jieme1989/item/6e5f41d3f65be848ddf9beb9 第三篇 http://blog.csdn.net/luo ...
- Es6 学习笔记
变量 let let用来声明变量,作用和var类似,所声明的变量只在let生命的代码块内有效. //1.不允许重复声明 let num = 2; let num = 3; //error //2.块级 ...
- MPlayer-2016 最新版本
MPlayer 和 FFmpeg 最新版本 运行 Install.cmd 添加右键播放功能 mplayer\outformat.conf 配置视频分割命令参数 ; 往前0.05秒 大概10多个帧 ' ...
- 在java项目中使用AES256 CBC加密
首先要注意一点,默认的JDK是不支持256位加密的,需要到Oracle官网下载加密增强文件(Java Cryptography Extension (JCE) Unlimited Strength J ...
- Greedy:Linear world(POJ 2674)
Linear world 题目大意:一些人生活在线性世界中,到达线性世界两端就会消失,两个人的前进方向有两个,相遇会改变各自相遇方向,求最后一个人掉下的人的名字和时间. 其实这一题就是弹性碰撞的模 ...