树状数组--区间加单点询问
来源:互联网 发布:哪里有im域名 编辑:程序博客网 时间:2024/06/06 01:16
我们知道,线段树用来做单点修改是很方便的,那么,既然这么方便,为什么不能用它来做区间修改呢?好吧,我们来试试看:
首先不难想到要把区间修改转化为前缀修改,即,将把
那么我们来考虑如何维护这个东西,考虑
显然需要分两种情况讨论:
1∘i<x
对于这样的
2∘i≤x
对于这样的
接下来我们来考虑如何求
代码
#include<cstdio>#include<cstring>#include<algorithm>#define maxn 100006#define lowbit(x) (x&-x)#define LL long longusing namespace std;inline char nc(){ static char buf[100000],*i=buf,*j=buf; return i==j&&(j=(i=buf)+fread(buf,1,100000,stdin),i==j)?EOF:*i++;}inline LL _read(){ char ch=nc();LL sum=0; while(!(ch>='0'&&ch<='9'))ch=nc(); while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc(); return sum;}int n,tet;LL a[maxn],f1[maxn],f2[maxn];void put1(int x,LL y){for(;x<=n;x+=lowbit(x))f1[x]+=y;}LL get1(int x){ if(x<0)return 0; int sum=0; for(;x;x-=lowbit(x))sum+=f1[x]; return sum;}void put2(int x,LL y){for(;x<=n;x+=lowbit(x))f2[x]+=y;}LL get2(int x){ if(x<0)return 0; LL sum=0; for(;x;x-=lowbit(x))sum+=f2[x]; return sum;}void put(int l,int r,LL k){ if(l>1)put1(l-1,-k),put2(l-1,(1-l)*k); put1(r,k);put2(r,r*k);}LL get(int x){return x*(get1(n)-get1(x))+get2(x);}int main(){ freopen("temp.in","r",stdin); freopen("temp.out","w",stdout); n=_read();tet=_read(); for(int i=1;i<=n;i++) a[i]=a[i-1]+_read(); while(tet--){ int k=_read(); if(k==1){ int l=_read(),r=_read(),x=_read(); put(l,r,x); }else{ int l=_read(),r=_read(); printf("%lld\n",a[r]-a[l-1]+get(r)-get(l-1)); } } return 0;}
阅读全文
0 0
- 树状数组--区间加单点询问
- 树状数组(单点修改,区间询问)
- 树状数组模板区间更新 区间询问
- 树状数组模板区间更新 区间询问
- HDU1556 Color the ball(树状数组BIT 区间修改单点询问)
- poj3468树状数组之区间更新+区间询问
- 树状数组模板区间更新 区间询问大全
- HDU 4031 树状数组 区间更新及点询问
- poj2155树状数组 区间更新 单点查询
- 【树状数组】HUD1556 区间修改单点求值
- 树状数组的区间修改,单点查询
- 树状数组区间维护及单点查询
- 【codevs1080】【树状数组】 单点修改 区间查询
- 【codevs1081】【树状数组】区间修改 单点查询
- 树状数组 区间修改,单点查询;
- 树状数组的单点更新,区间查询。
- [模板]树状数组(区间修改单点查询)
- 树状数组单点修改区间查询
- HTML5 实现跨域消息传递
- Hdu6069 Counting Divisors(2017多校第4场)
- 拷贝图片
- 由View.post引发的问题
- Guided Image Filtering
- 树状数组--区间加单点询问
- 【HDU1233】还是畅通工程(最小生成树-水题)
- PAT 5-19
- 最大连续子数列和 模板
- 关于i++ 跟++i 的区别。
- 字节输入流
- LeetCode:minimum-depth-of-binary-tree(二叉树最小深度)
- 用递归方式实现逆序输出
- Unity UGUI 原理篇(四):Event System Manager 事件與觸發