树状数组 区间修改查询
来源:互联网 发布:无线路由器 知乎 编辑:程序博客网 时间:2024/05/19 22:02
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <queue>#include <vector>#include <stack>using namespace std;#define N 200010typedef long long ll;int n,m;ll sum[N],A[N],B[N]; //原始前缀和,inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();} return x*f;}inline int lowbit(int x){ return x&(-x);}void Add(ll *q,int x,ll val){ for(int i=x;i<=n;i+=lowbit(i)) q[i]+=val;}ll Query(ll *q,int x){ ll sum=0; for(int i=x;i>0;i-=lowbit(i)) sum+=q[i]; return sum;}ll Sum(int x,int y){ ll t1=sum[x-1]+Query(A,x-1)*x-Query(B,x-1); ll t2=sum[y]+Query(A,y)*(y+1)-Query(B,y); return t2-t1;}int main(){ n=read(); for(int i=1;i<=n;i++) { int x=read(); sum[i]=sum[i-1]+x; } m=read(); for(int i=1;i<=m;i++) { int kind=read(); if(kind==1) { int x=read(),y=read(),z=read(); Add(A,x,z);Add(A,y+1,z*(-1)); Add(B,x,(long long)x*z);Add(B,y+1,(long long)z*(y+1)*(-1)); } else { int x=read(),y=read(); printf("%lld\n",Sum(x,y)); } } return 0;}
0 0
- 树状数组 区间修改查询
- 树状数组区间修改+查询
- 树状数组~poj3468~区间修改 区间查询
- 树状数组 --区间查询+区间修改
- 【codevs1082】【树状数组】 区间修改 区间查询
- 笔记 树状数组--区间查询+区间修改
- 树状数组实现 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改 区间查询
- 【树状数组】区间修改&点查询
- 【树状数组】点修改&区间查询
- 树状数组的区间修改,单点查询
- hdu1556 树状数组 区间修改,点查询
- 【codevs1080】【树状数组】 单点修改 区间查询
- 【codevs1081】【树状数组】区间修改 单点查询
- 树状数组 区间修改,单点查询;
- Divide Two Integers
- 数据类型
- POJ 1852 Ants
- margin详解和使用
- bzoj1031【JSOI2007】字符加密Cipher
- 树状数组 区间修改查询
- 学习ERP从内部集成起步(1-2章)收获
- deep learning 之 PCA and Whitening 代码篇
- 利用"animateWithDuration"实现带弹簧动画的顶部通知栏
- 智力题
- OpenGL 系列学习之一
- spring 4.0.3整合Hessian4.0.38 IDEA
- Android之应用坐标系统全面详解
- 【第六章】 AOP 之 6.1 AOP基础 ——跟我学spring3