[kuangbin带你飞]专题七 线段树 C
来源:互联网 发布:ebody哪些好看知乎 编辑:程序博客网 时间:2024/05/20 22:27
https://vjudge.net/contest/66989#problem/C
区间修改
#include <cstdio>#include <algorithm>#include <iostream>#define lid (id << 1)#define rid (id << 1 | 1)using namespace std;const int maxn = 1e5+6;int n,a[maxn],m;struct node{ int l,r; long long sum,lazy; void updata(long long x) { sum =sum+(r-l+1)*x; //增加 lazy=lazy+x; }} tr[maxn*4];void push_up(int id){ tr[id].sum=tr[lid].sum+tr[rid].sum;}void push_down(int id){ if(tr[id].lazy) { tr[lid].updata(tr[id].lazy); tr[rid].updata(tr[id].lazy); tr[id].lazy=0; }}void build(int id,int l,int r){ tr[id].l=l,tr[id].r=r; if(l==r) tr[id].sum=a[l],tr[id].lazy=0; else { int mid=(l+r)/2; build(lid,l,mid); build(rid,mid+1,r); push_up(id); }}void updata(int id,int l,int r,long long val){ if(l==tr[id].l&&tr[id].r==r) tr[id].updata(val); else { push_down(id); int mid = (tr[id].l+tr[id].r)>>1; if(r<=mid) updata(lid,l,r,val); else if (l>mid) updata(rid,l,r,val); else { updata(lid,l,mid,val); updata(rid,mid+1,r,val); } push_up(id); }}long long query_sum(int id,int l,int r){ if(l==tr[id].l&&tr[id].r==r) return tr[id].sum; else { push_down(id); int mid = (tr[id].l+tr[id].r)>>1; if(r<=mid) return query_sum(lid,l,r); else if(l>mid) return query_sum(rid,l,r); else return query_sum(lid,l,mid)+query_sum(rid,mid+1,r); push_up(id); }}int main(){ while(scanf("%d%d",&n,&m)==2) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); char ch; for(int i=1;i<=m;i++) { scanf(" %c",&ch); if(ch=='Q') { int x,y; scanf("%d%d",&x,&y); printf("%lld\n",query_sum(1,x,y)); } else if(ch=='C') { int val,x,y; scanf("%d%d%d",&x,&y,&val); updata(1,x,y,val); } } }}
阅读全文
0 0
- [kuangbin带你飞]专题七 线段树 C
- [kuangbin带你飞]专题七 线段树
- [kuangbin带你飞]专题七 线段树 H HDU4027
- [kuangbin带你飞]专题七 线段树 B
- [kuangbin带你飞]专题七 线段树 A
- [kuangbin带你飞]专题七 线段树 E
- [kuangbin带你飞]专题七 线段树 F
- [kuangbin带你飞]专题七 线段树 C POJ 3468
- [kuangbin带你飞]专题七 线段树 【A、B、C、E、G、H】
- [kuangbin带你飞]专题七 线段树 ABCDE 题解,持续更新
- [kuangbin带你飞]专题七 线段树 A HDU 1166
- [kuangbin带你飞]专题七 线段树 B HDU 1754
- [kuangbin带你飞]专题七 线段树 D POJ 2528
- [kuangbin带你飞]专题七 线段树 E HDU 1698
- [kuangbin带你飞]专题七 线段树 G POJ 3264
- [kuangbin带你飞]专题七 线段树 I HDU 1540
- [kuangbin带你飞]专题七 线段树 J HDU 3974
- [kuangbin带你飞]专题七 线段树 题解(未完)
- 自学mysql—Mysql执行顺序
- 基础练习 特殊回文数
- 一个最简单的循环
- python里实现插入排序算法
- Linux学习路程(2)命令行模式
- [kuangbin带你飞]专题七 线段树 C
- Spring Data
- 51NOD-1090 3个数和为0
- 日本有剧情的av番号
- ZOJ 1156
- 二分图多重匹配
- pata1081(应该是long long类型却写成int类型也会超时)
- C# Dictionary 遍历删除
- 刷紫书第四章例题(例题4-1,4-2,4-3)