树状数组区间修改区间查询
来源:互联网 发布:施工进度网络计划软件 编辑:程序博客网 时间:2024/05/22 01:28
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;long long num[200050];long long c[200050];long long c2[200050];long long n,q;long long lowbit(long long i){ return i&(-i);}void add(long long *r,long long i,long long a){ for(i; i<=n; i+=lowbit(i)) { r[i]+=a; } return;}long long sum(long long *r,long long i){ long long he=0; for(i; i>0; i-=lowbit(i)) { he+=r[i];//cout<<"++"<<endl; } return he;}int main(){ scanf("%lld",&n); num[0]=0; for(int i=1; i<=n; i++) { scanf("%lld",&num[i]); } for(int i=1; i<=n; i++) { add(c,i,num[i]-num[i-1]); add(c2,i,(i-1)*(num[i]-num[i-1])); } long long k,x,y,val,sum1,sum2; scanf("%lld",&q); for(int i=0; i<q; i++) { scanf("%lld",&k); if(k==1) { scanf("%lld%lld%lld",&x,&y,&val); add(c,x,val); add(c,y+1,-val); add(c2,x,(x-1)*val); add(c2,y+1,y*(-val)); } else if(k==2) { scanf("%lld%lld",&x,&y); sum1=(x-1)*sum(c,x-1)-sum(c2,x-1); sum2=y*sum(c,y)-sum(c2,y); printf("%lld\n",sum2-sum1); } }}
阅读全文
0 0
- 树状数组~poj3468~区间修改 区间查询
- 树状数组 --区间查询+区间修改
- 【codevs1082】【树状数组】 区间修改 区间查询
- 笔记 树状数组--区间查询+区间修改
- 树状数组实现 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改 区间查询
- 树状数组 区间修改查询
- 树状数组区间修改+查询
- 树状数组(单点修改区间查询、区间修改单点查询、区间修改区间查询)
- 树状数组-单点修改区间查询-区间修改单点查询-区间修改区间查询
- 【树状数组】区间修改&点查询
- 【树状数组】点修改&区间查询
- 树状数组的区间修改,单点查询
- hdu1556 树状数组 区间修改,点查询
- 【codevs1080】【树状数组】 单点修改 区间查询
- Linux初级入门命令篇(2)
- stl知识整理-应付CCF考试
- set算法 (交集,并集,差集,对称差集)
- Java使用反射处理注解
- 人工智能是否会超越人类?
- 树状数组区间修改区间查询
- mysql 中 ON DUPLICATE KEY UPDATE
- STS配置MAVEN
- Maven私服搭建(nexus)
- springboot项目访问不到controller方法。
- Javascript学习笔记(数组)
- 关于fastcgi与php-fpm
- ppt(Powerpoint)中插入swf(flash)动画方式
- NKOJ 2991 (NOI 2014) 魔法森林 (动态树+最小生成树)