Luogu 3368(树状数组)
来源:互联网 发布:网络教育学校有区别吗 编辑:程序博客网 时间:2024/05/18 02:26
传送门
树状数组区间修改单点查询(也可以套区间查询)模板题。
/* 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
- Luogu 3368(树状数组)
- luogu P3374树状数组模板
- luogu #2852 Milk Patterns(后缀数组)
- luogu3374 3368树状数组
- (转)树状数组
- 树状数组(转载)
- Stars(树状数组)
- 树状数组(interval)
- (转)树状数组
- 树状数组(2)
- 树状数组(3)
- 树状数组(4)
- 树状数组(5)
- 树状数组(6)
- poj2352Stars(树状数组)
- POJ2299(树状数组)
- hdu2492 (树状数组)
- 树状数组()
- Hibernate框架笔记之四种对象状态
- 【递推+乱搞】HDU6146 Pokémon GO
- Tablayout
- SSH的两种验证方式
- CART决策树算法浅谈(回归树部分)
- Luogu 3368(树状数组)
- PinnedHeaderItemDecoration
- typedef与#define的区别
- HTML5 canvas
- Unity11--Unity界面Game面板上既有按钮,又有显示距离和计时、摆放位置规范
- 设计模式总结
- centos minimal 记一晚惨痛的回忆
- 表单与组件(拍拍用户注册)
- C++中的const知识整理