poj3468 A Simple Problem with Integers(线段树成段更新)
来源:互联网 发布:医学人工智能联盟 编辑:程序博客网 时间:2024/05/07 17:30
题意:给定一串数字,进行两种固定操作:一,求某区间内的和;二对某区间内的所以数加上一指定数字。
水题
//4824 KB 2563 ms#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#define ll long long#define M 100005#define root 1,n,1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;ll sum[M<<2],add[M<<2];void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushdown(int rt,int m){ if(!add[rt]) return; add[rt<<1]+=add[rt]; add[rt<<1|1]+=add[rt]; sum[rt<<1]+=add[rt]*(m-(m>>1)); sum[rt<<1|1]+=add[rt]*(m>>1); add[rt]=0;}void build(int l,int r,int rt){ add[rt]=0; if(l==r){ scanf("%I64d",&sum[rt]); return; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}void update(int L,int R,int c,int l,int r,int rt){ if(L<=l&&r<=R){ sum[rt]+=c*(r-l+1); add[rt]+=c; return; } pushdown(rt,r-l+1); int m=(l+r)>>1; if(L<=m) update(L,R,c,lson); if(R>m) update(L,R,c,rson); pushup(rt);}ll query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R){ return sum[rt]; } pushdown(rt,r-l+1); int m=(l+r)>>1; ll ans=0; if(L<=m) ans+=query(L,R,lson); if(R>m) ans+=query(L,R,rson); return ans;}int main(){ int n,m; scanf("%d%d",&n,&m); build(root); while(m--){ char ch[5]; scanf("%s",ch); if(ch[0]=='C'){ int a,b,c; scanf("%d%d%d",&a,&b,&c); update(a,b,c,root); } else{ int a,b; scanf("%d%d",&a,&b); printf("%I64d\n",query(a,b,root)); } } return 0;}
0 0
- poj3468 A Simple Problem with Integers(线段树成段更新)
- POJ3468 A Simple Problem with Integers 线段树成段更新
- POJ3468 A Simple Problem with Integers 线段树成段更新
- poj3468(A simple Problem with Integers)(线段树成段增减)
- POJ3468 A Simple Problem with Integers 线段树成段更新(lazy)
- poj3468 A Simple Problem with Integers 线段树区间更新
- poj3468 A Simple Problem with Integers 线段树 延时更新
- Poj3468 A Simple Problem with Integers 线段树、区间更新
- poj3468 A Simple Problem with Integers 线段树 更新延迟
- 【poj3468-A Simple Problem with Integers】-线段树区间更新
- poj3468 A Simple Problem with Integers(spaly&&线段树)
- poj3468 A Simple Problem with Integers(线段树)
- poj3468(A Simple Problem with Integers)线段树实现
- poj3468 A Simple Problem with Integers(线段树)
- POJ3468 A Simple Problem with Integers(线段树)
- POJ3468 A Simple Problem with Integers(线段树)
- poj3468:A Simple Problem with Integers(线段树lazy)
- POJ3468 A Simple Problem with Integers(线段树成段更新,区间查询)
- 安装hive and 创建和hbase关联表
- TypeScript环境搭建
- Spintronics History
- 数的划分
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- poj3468 A Simple Problem with Integers(线段树成段更新)
- hdu3081 Marriage Match II 二分+最大流
- url模块的基本用法
- MFC教程——鸡啄米
- 嗯。据说一个想成为大神的人都要有一个CSDN的博客。
- 欢迎使用CSDN-markdown编辑器
- 经典励志故事2:管道的故事
- struts2框架---------拦截器(Interceptor)
- 巴什博奕 hdu 2149 输出第一步可以走的情况