树状数组区间操作模板
来源:互联网 发布:西门子数控编程软件 编辑:程序博客网 时间:2024/05/24 04:26
推荐一篇博客:
http://m.blog.csdn.net/blackjack_/article/details/74997479
推导过程在代码之前,模板题是Luogu 3368或者codevs线段树练习3
/* pre_sum(n)=a[1]+a[2]+...+a[n] =c[1]+(c[1]+c[2])+...+(c[1]+c[2]+...+c[n]) =n*(c[1]+c[2]+...+c[n])-(0*c[1]+1*c[2]+...+(n-1)*c[n]) 令d[i]=(i-1)*c[i] modify(l,r,+v): add(c,l,v),add(c,r+1,-v),add(d,l,(l-1)*v),add(d,r+1,-r*v) pre_sum(n)=n*query(c,n)-query(d,n) sum(l,r)=pre_sum(r)-pre_sum(l-1)*/#include<bits/stdc++.h>using namespace std;const int MAXN=5e5+2;int n,m,c[MAXN],d[MAXN];inline int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x*f;}inline void add(int *r,int pos,int v) { for (int i=pos;i<=n;i+=(i&-i)) r[i]+=v;}inline int query(int *r,int pos) { int ret=0; for (int i=pos;i;i-=(i&-i)) ret+=r[i]; return ret;}int main() {// freopen("P3368.in","r",stdin); memset(c,0,sizeof(c)), memset(d,0,sizeof(d)); n=read(),m=read(); for (register int i=1;i<=n;++i) { int v=read(); add(c,i,v),add(c,i+1,-v),add(d,i,(i-1)*v),add(d,(i+1),-i*v); } for (register int i=1;i<=m;++i) { int opt=read(); if (opt&1) { int l=read(),r=read(),v=read(); add(c,l,v),add(c,r+1,-v),add(d,l,(l-1)*v),add(d,(r+1),-r*v); } else { int pos=read(),l=pos-1,r=pos; int t1=r*query(c,r)-query(d,r),t2=l*query(c,l)-query(d,l); printf("%d\n",t1-t2); } } return 0;}
阅读全文
0 0
- 树状数组区间操作模板
- 树状数组模板区间更新 区间询问
- 树状数组模板区间更新 区间询问
- [POJ3468] 区间操作 - 树状数组
- [模板]树状数组(区间修改单点查询)
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3368树状数组2)
- 树状数组模板区间更新 区间询问大全
- 树链剖分&树状数组区间加减区间求和模板
- 树状数组的区间修改和区间查询模板
- CodeVS 1082 (区间修改+区间查询树状数组模板)
- hdu1166 树状数组模板:单点更新,区间求和(区间查询)
- 【模板】树状数组的区间加值和区间查询
- 【模板】树状数组 单点修改,区间求和 (模板题:洛谷P3374树状数组1)
- 用树状数组解决"区间和"问题模板(1166)
- HDU 1556 Color the ball 树状数组-区间更新-模板
- 树状数组模板(区间更新单点查询)
- 树状数组解决区间求和问题(模板)
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3372线段树1)
- C++中的const知识整理
- 2017/8/24
- [13] Mysql常用操作
- Java 正则表达式
- gulp插件gulp-repath使用教程
- 树状数组区间操作模板
- Matlab基础_1
- 感知机与adaline算法
- nginx 泛解析
- Android 内存查看常用命令
- springmvc验证登录用过滤器还是拦截器
- HDU 2209 翻纸牌游戏
- 【JZOJ5335】【NOIP2017提高A组模拟8.24】早苗
- LICEcap 屏幕录制工具