poj 3468
来源:互联网 发布:中学生编程大赛 编辑:程序博客网 时间:2024/06/05 16:03
线段树区间更新,区间查询。。
#include<iostream>#include<algorithm>using namespace std;#define MAXN 100005#define lson u<<1#define rson u<<1|1#define LL __int64struct Node{int lef,rig;LL sum,delta;//增值}T[MAXN<<2];int dat[MAXN];void Build(int u,int l,int r){T[u].lef=l;T[u].rig=r;T[u].delta=0;if(l==r){T[u].sum=dat[l];return;}int mid=(l+r)>>1;Build(lson,l,mid);Build(rson,mid+1,r);T[u].sum=T[lson].sum+T[rson].sum;}void Update(int u,int l,int r,LL v){if(l<=T[u].lef&&T[u].rig<=r){T[u].delta+=v;T[u].sum+=(T[u].rig-T[u].lef+1)*v;}else {if(T[u].delta){T[lson].delta+=T[u].delta;T[rson].delta+=T[u].delta;T[lson].sum+=(T[lson].rig-T[lson].lef+1)*T[u].delta;T[rson].sum+=(T[rson].rig-T[rson].lef+1)*T[u].delta;T[u].delta=0;}if(r<=T[lson].rig)Update(lson,l,r,v);else if(l>=T[rson].lef)Update(rson,l,r,v);else {Update(lson,l,T[lson].rig,v);Update(rson,T[rson].lef,r,v);}T[u].sum=T[lson].sum+T[rson].sum;}}LL Query(int u,int l,int r){if(l<=T[u].lef&&T[u].rig<=r){return T[u].sum;}else {if(T[u].delta){T[lson].delta+=T[u].delta;T[rson].delta+=T[u].delta;T[lson].sum+=(T[lson].rig-T[lson].lef+1)*T[u].delta;T[rson].sum+=(T[rson].rig-T[rson].lef+1)*T[u].delta;T[u].delta=0;}if(r<=T[lson].rig)return Query(lson,l,r);else if(l>=T[rson].lef)return Query(rson,l,r);else return Query(lson,l,T[lson].rig)+Query(rson,T[rson].lef,r);}}int main(){int N,Q,i;int x,y,z;char cmd;while(scanf("%d%d",&N,&Q)==2){for(i=1;i<=N;i++)scanf("%d",&dat[i]);Build(1,1,N);while(Q--){scanf(" %c",&cmd);if(cmd=='C'){scanf("%d%d%d",&x,&y,&z);Update(1,x,y,z);}else {scanf("%d%d",&x,&y);LL ans=Query(1,x,y);printf("%I64d\n",ans);}}}}
- poj 3468
- POJ 3468
- poj 3468
- poj 3468
- poj 3468
- poj 3468
- poj 3468
- POJ 3468
- POJ 3468
- POJ 3468
- POJ 3468
- POJ 3468
- poj 3468
- poj-3468
- POJ 3468
- POJ 3468
- POJ-3468
- poj 3468
- Windows系统“无法打开”故障解决方法
- android-ProgressBar加文字
- android 9PNG图片制作
- ARCGIS10 官方中文版迅雷下载
- excel库的使用问题
- poj 3468
- Oracle 备份恢复
- Oracle SQL 正则表达式示例一则
- 阿里巴巴开源项目 Druid 负责人温少访谈
- 打算2012.7.16
- 放暑假后的10来天
- 16日,7月,2012 - 昨天晚睡 | 整理电脑 | 没有进度
- 结构体中最后成员为一个数组(长度为零)与一个指针
- android-更改ProgressBar颜色