poj3468(线段树 边覆盖)
#include<cstdio>
int lb,rb,data;
long long sum[5000000],extra[5000000];
void add(int l,int r,int now)
{
if(lb<=l&&rb>=r){
extra[now]+=data;
sum[now]+=data*(r-l+1);
return;
}
int mid=(l+r)/2,nl=2*now,nr=2*now+1;
extra[nl]+=extra[now];
extra[nr]+=extra[now];
sum[nl]+=extra[now]*(mid-l+1);
sum[nr]+=extra[now]*(r-mid);
extra[now]=0;
if(rb<=mid) add(l,mid,nl);
else if(lb>mid) add(mid+1,r,nr);
else {add(l,mid,nl);add(mid+1,r,nr);}
sum[now]=sum[nl]+sum[nr];
}
long long query(int l,int r,int now)
{
if(lb<=l&&rb>=r) return(sum[now]);
int mid=(l+r)/2,nl=2*now,nr=2*now+1;
extra[nl]+=extra[now];
extra[nr]+=extra[now];
sum[nl]+=extra[now]*(mid-l+1);
sum[nr]+=extra[now]*(r-mid);
extra[now]=0;
if(rb<=mid) return(query(l,mid,nl));
else if(lb>mid) return(query(mid+1,r,nr));
else return(query(l,mid,nl)+query(mid+1,r,nr));
}
int main()
{
int i,j,k,n,m;
char c[2];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&data);
lb=rb=i;
add(1,n,1);
}
for(i=1;i<=m;i++){
scanf("%s",&c);
switch (c[0]){
case 'C':
scanf("%d%d%d",&lb,&rb,&data);
add(1,n,1);
break;
case 'Q':
scanf("%d%d",&lb,&rb);
printf("%lld\n",query(1,n,1));
break;
}
}
return 0;
}
poj3468(线段树 边覆盖)的更多相关文章
- poj3468 线段树的懒惰标记
题目链接:poj3468 题意:给定一段数组,有两种操作,一种是给某段区间加c,另一种是查询一段区间的和 思路:暴力的方法是每次都给这段区间的点加c,查询也遍历一遍区间,复杂度是n*n,肯定过不去,另 ...
- POJ3468 线段树(区间更新,区间求和,延迟标记)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 97196 ...
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- POJ3468(线段树 区间修改 lazy-tag)
我的线段树真的没救了......还是多练几道吧....... You have N integers, A1, A2, ... , AN. You need to deal with two kind ...
- POJ3468(线段树区间维护)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 85502 ...
- poj3468(线段树区间更新&区间求和模板)
题目链接: http://poj.org/problem?id=3468 题意: 输入 n, m表初始有 n 个数, 接下来 m 行输入, Q x y 表示询问区间 [x, y]的和: C x y z ...
- POJ-3468(线段树+区间更新+区间查询)
A Simple Problem With Integers POJ-3468 这题是区间更新的模板题,也只是区间更新和区间查询和的简单使用. 代码中需要注意的点我都已经标注出来了,容易搞混的就是up ...
- poj3468线段树标记永久化
#include<map> #include<set> #include<list> #include<cmath> #include<queue ...
- poj3468 A Simple Problem with Integers(线段树区间更新)
https://vjudge.net/problem/POJ-3468 线段树区间更新(lazy数组)模板题 #include<iostream> #include<cstdio&g ...
随机推荐
- Spark Tungsten揭秘 Day1 jvm下的性能优化
Spark Tungsten揭秘 Day1 jvm下的性能优化 今天开始谈下Tungsten,首先我们需要了解下其背后是符合了什么样的规律. jvm对分布式天生支持 整个Spark分布式系统是建立在分 ...
- vsftpd本地用户登录密码错误
今天发现自己虚拟机的vsftp使用本地用户名无法登陆,于是重新配置,但配置了很多次都没成功,一直显示 530 Login incorrect. Login failed 尝试了网上很多修改PAM的方案 ...
- 快速编译Delphi XE3 项目工程组
Embarcadero 做了个好事.工程组可以直接使用 MSBuild 进行编译,让发布更简单.在Bin目录中 rsvars.bat 用于设置编译的环境变量,结合使用就可以顺利进行编译. call r ...
- wampserver安装后的基本配置
wampserver安装后的基本配置 1.WampServer的安装 下载好安装包后,你能在保存其文件夹中找到这样一个图标: 双击它,会弹出如下提示 提示信息:不要试图从Wamp5 1.x(x代表任意 ...
- NET Reflector 8 使用
一,把杀毒软件停掉 二,把原机器上的 Reflector 文件删除 三,找到C:\Users\Administrator\AppData\Local\Red Gate这个目录,将里面的东西删除 四,v ...
- install window7
install window7 http://www.zhujixc.com/win7home/http://jingyan.baidu.com/album/5bbb5a1b3e301713eba17 ...
- 自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)
很多高端机械键盘,支持宏定义,例如我们可以设置"D"键为"dota",这样当我们按一下宏开启键,再按一下"D"键,就等价于分别按了" ...
- Excel与SqlServer的导入导出问题总结
1.Excel导入到SqlServer中,如果Excel里面的某一列,即有文本,又有数字,导入SqlServer中这一列的类型将会是float,Excel里面对应的文本值将导不进来,为null. 解决 ...
- OC 数据类型之间的转换方法
NSNumber转NSString: 假设现有一NSNumber的变量A,要转换成NSString类型的B 方法如下: NSNumberFormatter* numberFormatter = [ ...
- [转载]async & await 的前世今生
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...