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 ...
随机推荐
- Ubuntu 虚拟机空间不足增加空间笔记
一开始给虚拟机加空间以为只是需要在虚拟机设置里面添加就行,后面发现还得重新在虚拟机内部增加. 链接: http://pan.baidu.com/s/1c2uVcCo 密码: xid8 这只是第一步,共 ...
- CCF 模拟B 无脑循环+输入输出外挂
http://115.28.138.223:81/view.page?opid=2#code 代码一有WA点80分 #include<iostream> #include<cstdi ...
- 5.3---找最近的两个数(CC150)
public static int[] getCloseNumber(int x){ int[] res = new int[2]; int i = 1; int num = oneNumber(x) ...
- ubuntu安装文件比较工具Meld
Meld是一款可视化的文件及目录对比(diff) / 合并 (merge) 工具,通过它你可以对两个或三个文件/目录进行对比,并以图形化的方式显示出它们的不同之处,同时还提供编辑及合并功能,另外还支持 ...
- ubuntu apt常用命令
apt-cache search packagename 搜索包 apt-cache show packagename 获取包的相关信息,如说明.大小.版本等 apt-get install pack ...
- C#系统委托之Action And Func
Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...
- C#之系统自带保存属性
源代码下载链接 程序开发很多时候需要根据运行环境做不通的参数配置,通过写ini之类的文本文件是一种方法,但这种方法也同时会把数据暴露 Winform开发中可以将需要配置的字段属性保存到程序中(其实也是 ...
- 5.SpringMVC静态文件的访问
我们在进行springMVC开发时,必定会在jsp页面引入js文件.img文件和css文件.大多数人会将这些分类存放在WebRoot文件下新建的文件夹下面.同时,会在web.xml文件中配置拦截所有请 ...
- Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
开始--运行--输入regsvr32空格 然后将filezila安装目录下的fzshellext.dll拖拽到[regsvr32空格]之后 注:64位电脑注意拖拽的文件为fzshellext_64 ...
- Lake Counting_深度搜索_递归
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 30414 Accepted: 15195 D ...