C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)
参考qsc大佬的视频 太强惹 先膜一下 视频在b站 直接搜线段树即可
#include<cstdio>
using namespace std;
const int maxn=1e5+;
int n,a[maxn];
struct Node{
int l,r;
long long sum,lazy;
void update(long long x){//用于更新区间和 和懒标记
sum+=1ll*(r-l+)*x;
lazy+=x;
}
}tree[maxn*];
void push_up(int x){//用于用子区间重新计算该区间的区间和
tree[x].sum=tree[x<<].sum+tree[x<<|].sum;
}
void push_down(int x){//把lazy标记往下面传递
int lazyval=tree[x].lazy;
if(lazyval){
tree[x<<].update(lazyval);
tree[x<<|].update(lazyval);
tree[x].lazy=;
}
}
void build(int x,int l,int r){//建树
tree[x].l=l,tree[x].r=r;
tree[x].sum=tree[x].lazy=;
if(l==r){
tree[x].sum=a[l];
}
else {
int mid=l+r>>;
build(x<<,l,mid);
build(x<<|,mid+,r);
push_up(x);
}
}
void update(int x,int l,int r,long long val){//区间修改
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){//完全包含直接修改就行
tree[x].update(val);
}
else {//push_down 把懒标记往下面传
push_down(x);//不是完全包含 继续往下面修改包含的区间l ,r 不用改它是用来判断当前区间位不位于要修改的区间里面的,如果位于那么就要修改
int mid=L+R>>;
if(mid>=l)update(x<<,l,r,val);
if(r>mid)update(x<<|,l,r,val);
push_up(x);//已经更新好了子区间重新计算区间和
}
}
long long query(int x,int l,int r){//查询l,r区间 x是节点标号 和上面update类似
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){
return tree[x].sum;
}
else {
push_down(x);
long long ans=;
int mid=L+R>>;
if(mid>=l)ans+=query(x<<,l,r);
if(r>mid)ans+=query(x<<|,l,r);
push_up(x);
return ans;
}
}
int main(){
int q;
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
build(,,n);
for(int i=;i<=q;i++){
int l,r,val;
char op[];
scanf("%s",op);
if(op[]=='C'){
scanf("%d%d%d",&l,&r,&val);
update(,l,r,val);
}
else {
scanf("%d%d",&l,&r);
printf("%lld\n",query(,l,r));
}
} return ;
}
C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)的更多相关文章
- A Simple Problem with Integers POJ - 3468 (线段树)
思路:线段树,区间更新,区间查找 #include<iostream> #include<vector> #include<string> #include< ...
- A Simple Problem with Integers POJ - 3468 线段树区间修改+区间查询
//add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #includ ...
- A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 69589 ...
- ACM: A Simple Problem with Integers 解题报告-线段树
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...
- A Simple Problem with Integers~POJ - 3468
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- A Simple Problem with Integers POJ - 3468 (分块)
题目链接:https://cn.vjudge.net/problem/POJ-3468 题目大意:区间加减+区间查询操作. 具体思路:本来是一个线段树裸题,为了学习分块就按照分块的方法做吧. 分块真的 ...
- POJ 3468 A Simple Problem with Integers(详细题解) 线段树
这是个线段树题目,做之前必须要有些线段树基础才行不然你是很难理解的. 此题的难点就是在于你加的数要怎么加,加入你一直加到叶子节点的话,复杂度势必会很高的 具体思路 在增加时,如果要加的区间正好覆盖一个 ...
- C - A Simple Problem with Integers - poj 3468(区间更新)
题意:有一个比较长的区间可能是100000.长度, 每个点都有一个值(值还比较大),现在有一些操作,C abc, 把区间a-b内全部加上c, Qab,求区间ab的值. 分析:很明显我们不可能对区间的每 ...
- A Simple Problem with Integers(100棵树状数组)
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
随机推荐
- 深入理解Redis Cluster
Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式: slot = CRC16(key) & 16383 每个节点负责维护一部分槽以及槽所映射 ...
- Python股票分析系列——基础股票数据操作(一).p3
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...
- 官宣 ! 52abp_Pro版本低调上线
上线了 官宣!官宣!官宣! 重要的事情说三次. 是的,你没有看错 https://www.52abp.com/ 的官方企业模板:52abp-pro已经正式上线. 至此52abp.com的官方网站就算告 ...
- React-redux框架之connect()与Provider组件 用法讲解
react-redux 在react-redux 框架中,给我提供了两个常用的API来配合Redux框架的使用,其实在我们的实际项目开发中,我们完全可以不用react-redux框架,但是如果使用此框 ...
- hdu 4135 a到b的范围中多少数与n互质(容斥)
Co-prime 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135 input The first line on input contains ...
- 牛客练习赛 A题 筱玛的快乐
链接:https://ac.nowcoder.com/acm/contest/342/A来源:牛客网 筱玛的快乐 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语 ...
- Day8 Python基础之遗漏知识点(六)
1. 遗漏知识点 深.浅拷贝: http://www.cnblogs.com/yuanchenqi/articles/5782764.html a=b: 浅拷贝: 深拷贝 集合(set) 集合的定 ...
- Python2和Python3中urllib库中urlencode的使用注意事项
前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...
- 分布式事务 spring 两阶段提交 tcc
请问分布式事务一致性与raft或paxos协议解决的一致性问题是同一回事吗? - 知乎 https://www.zhihu.com/question/275845393 分布式事务11_TCC 两阶段 ...
- 分布式文件系统FastDFS
fastdfs_百度百科https://baike.baidu.com/item/fastdfs/5609710 用FastDFS一步步搭建文件管理系统 - bojiangzhou - 博客园http ...