[kuangbin带你飞]专题七 线段树 C POJ 3468
来源:互联网 发布:数据信号避雷器 编辑:程序博客网 时间:2024/05/19 05:05
题目地址:https://vjudge.net/contest/66989#problem/C
思路:线段树上区间成段更新,意识到了不能像之前一样一个一个修改,想了一晚上,没什么好想法,就搜了一下题解。思路真是很巧妙,学到了。
原文地址:http://blog.csdn.net/acceptedxukai/article/details/6933446
AC代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1e5+10;int n,m;struct seg{int l,r;long long n,add;}T[maxn*4];void PushDown(int k,int m){ if(T[k].add) { T[k<<1].add+=T[k].add; T[k<<1|1].add+=T[k].add; T[k<<1].n+=T[k].add*(m-(m>>1)); T[k<<1|1].n+=T[k].add*(m>>1); T[k].add=0; }}void update(int c,int l,int r,int k){ if(T[k].l==l && T[k].r==r) { T[k].add+=c; T[k].n+=(long long)c*(r-l+1); return; } if(T[k].l==T[k].r) return; PushDown(k,T[k].r-T[k].l+1); int mid=(T[k].l+T[k].r)>>1; if(r<=mid) update(c,l,r,k<<1); else if(l>mid) update(c,l,r,k<<1|1); else { update(c,l,mid,k<<1); update(c,mid+1,r,k<<1|1); } T[k].n=T[k<<1].n+T[k<<1|1].n;}void build(int l,int r,int k){ T[k].l=l,T[k].r=r,T[k].add=0; if(l==r) { scanf("%I64d",&T[k].n); return; } int mid=(l+r)>>1; build(l,mid,2*k); build(mid+1,r,2*k+1); T[k].n=T[2*k].n+T[2*k+1].n;}long long ans;void search(int l,int r,int k){ if(T[k].l==l && T[k].r==r) { ans+=T[k].n; return; } PushDown(k,T[k].r-T[k].l+1); int mid=(T[k].l+T[k].r)>>1; if(r<=mid) search(l,r,2*k); else if(l>mid) search(l,r,2*k+1); else { search(l,mid,2*k); search(mid+1,r,2*k+1); }}int main(){ scanf("%d%d",&n,&m); build(1,n,1); for(int i=0;i<m;i++) { char aa[1]; scanf("%s",aa); if(aa[0]=='Q') { int a,b; scanf("%d%d",&a,&b); ans=0; search(a,b,1); printf("%I64d\n",ans); } else if(aa[0]=='C') { int a,b,c; scanf("%d%d%d",&a,&b,&c); update(c,a,b,1); } }}
0 0
- [kuangbin带你飞]专题七 线段树 C POJ 3468
- [kuangbin带你飞]专题七 线段树 C
- [kuangbin带你飞]专题七 线段树
- [kuangbin带你飞]专题七 线段树 H HDU4027
- [kuangbin带你飞]专题七 线段树 B
- [kuangbin带你飞]专题七 线段树 A
- [kuangbin带你飞]专题七 线段树 E
- [kuangbin带你飞]专题七 线段树 F
- [kuangbin带你飞]专题七 线段树 D POJ 2528
- [kuangbin带你飞]专题七 线段树 G POJ 3264
- [kuangbin带你飞]专题七 线段树 G POJ 3264
- [kuangbin带你飞]专题七 线段树 【A、B、C、E、G、H】
- [kuangbin带你飞]专题七 线段树 ABCDE 题解,持续更新
- [kuangbin带你飞]专题七 线段树 A HDU 1166
- [kuangbin带你飞]专题七 线段树 B HDU 1754
- [kuangbin带你飞]专题七 线段树 E HDU 1698
- [kuangbin带你飞]专题七 线段树 I HDU 1540
- [kuangbin带你飞]专题七 线段树 J HDU 3974
- 爱奇艺
- AD/DA转换(程序)
- [教程]关于如何配置MiNET
- 武当峡谷第一漂之勇涉急流
- 如何优化网站的响应时间
- [kuangbin带你飞]专题七 线段树 C POJ 3468
- linux dirname basename的用法
- Android Studio中的keystore
- 利用GUI界面来编写ATM机
- 企业注册号构造、入库实现原理
- PAT乙级1006
- 《Java多线程编程核心技术》(一)多线程技能
- 2.4.3节练习
- 目标跟踪学习算法之二:DSST