CodeVS 1082 (区间修改+区间查询树状数组模板)
来源:互联网 发布:淘宝手机端设置首页 编辑:程序博客网 时间:2024/06/05 10:44
题意:
两种操作:
1.区间修改
2.求区间和
参考博客:http://blog.csdn.net/fsahfgsadhsakndas/article/details/52650026
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5+7;ll arr[maxn],c1[maxn],c2[maxn];int n,q;void add(ll r[],int k,int v){ while(k<=n) { r[k] += v; k += k&(-k); }}ll getSum(ll r[],int k){ ll res = 0; while(k>0) { res += r[k]; k -= k&(-k); } return res;}int main(){ scanf("%d",&n); for(int i = 1;i<=n;i++) scanf("%lld",arr+i); arr[0] = 0; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(int i = 1;i<=n;i++) add(c1,i,arr[i]-arr[i-1]),add(c2,i,(i-1)*(arr[i]-arr[i-1])); scanf("%d",&q); while(q--) { int type; scanf("%d",&type); if(type==1) { int l,r,v; scanf("%d%d%d",&l,&r,&v); add(c1,l,v),add(c1,r+1,-v); add(c2,l,v*(l-1)),add(c2,r+1,-v*r); } else { int l,r; scanf("%d%d",&l,&r); ll sum1,sum2; sum1 = r*getSum(c1,r)-getSum(c2,r); sum2 = (l-1)*getSum(c1,l-1)-getSum(c2,l-1); printf("%lld\n",sum1-sum2); } } return 0;}
阅读全文
1 0
- CodeVS 1082 (区间修改+区间查询树状数组模板)
- codevs 1082 一维树状数组区间修改区间查询
- [模板]树状数组(区间修改单点查询)
- 树状数组的区间修改和区间查询模板
- 树状数组~poj3468~区间修改 区间查询
- 树状数组 --区间查询+区间修改
- 【codevs1082】【树状数组】 区间修改 区间查询
- 笔记 树状数组--区间查询+区间修改
- 树状数组实现 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改+区间查询
- 树状数组区间修改区间查询
- 树状数组 区间修改 区间查询
- 模板(线段树 + 树状数组 + 区间修改 + 区间查询)eg:POJ 3468
- 树状数组 区间修改查询
- 树状数组区间修改+查询
- 树状数组的应用(区间修改+区间查询)
- 树状数组再进阶(区间修改+区间查询)
- 年终总结——思考,沉淀
- java网络编程(一)----概论
- openjudge 取石子游戏(递归)
- 华为在线机试-字符串最后一个字符长度
- 反射访问私有成员和方法
- CodeVS 1082 (区间修改+区间查询树状数组模板)
- java反射和自定义注解的综合应用
- Android常用异常及解决方案
- August
- selenium驱动浏览器IE、Chrome、FireFox
- 最佳加法表达式
- Runnable JAR file spring + mybatis 普通项目(非maven 非springboot)
- word2vec原理推导与代码分析
- 分隔符和定长解码器在netty中的应用