线段树 (区间更新求和)
来源:互联网 发布:知乎suck for living 编辑:程序博客网 时间:2024/05/02 02:39
- #include <cstdio>
- #define LL __int64
- const int N = 500010;
- LL num[N], sum[N], add[N], v;
- void pushDown(int i, int l, int r) {
- if(add[i] != 0) {
- int mid = l + r >> 1;
- add[i << 1] += add[i];
- sum[i << 1] += (mid - l + 1) * add[i]; //[l, mid]代表左儿子区间
- add[i << 1 | 1] += add[i];
- sum[i << 1 | 1] += (r - mid) * add[i]; //[mid + 1, r]代表右儿子区间
- add[i] = 0;
- }
- }
- void update(int i, int l, int r, int ql, int qr, int val) {
- if(l > qr || ql > r)
- return ;
- if(l >= ql && r <= qr){
- sum[i] += (r - l + 1) * val;
- add[i] += val;
- return ;
- }
- pushDown(i, l, r);
- int mid = l + r >> 1;
- update(i << 1, l, mid, ql, qr, val);
- update(i << 1 | 1, mid + 1, r, ql, qr, val);
- sum[i] = sum[i << 1] + sum[i << 1 | 1];
- }
- LL query(int i, int l, int r, int ql, int qr) {
- if(l > qr || ql > r)
- return 0;
- if(l >= ql && r <= qr)
- return sum[i];
- pushDown(i, l, r);
- int mid = l + r >> 1;
- return query(i << 1, l, mid, ql, qr)
- + query(i << 1 | 1, mid + 1, r, ql, qr);
- }
- int main() {
- int n, q, l, r;
- char ord;
- scanf("%d%d", &n, &q);
- for(int i = 1; i <= n; i++) {
- scanf("%lld", &num[i]);
- update(1, 1, n, i, i, num[i]);
- }
- while(q--) {
- scanf("\n%c", &ord);
- if(ord == 'Q') {
- scanf("%d%d", &l, &r);
- printf("%lld\n", query(1, 1, n, l, r));
- } else {
- scanf("%d%d%lld", &l, &r, &v);
- update(1, 1, n, l, r, v);
- }
- }
- return 0;
- }
0 0
- 线段树(区间更新求和)
- 线段树(单点更新,区间求和)
- 线段树 (区间更新求和)
- 线段树区间更新+求和
- poj3468 线段树区间更新,区间求和
- 线段树总结(单点更新,区间更新,区间求和,区间求最值)
- hdu1394——线段树(单点更新 区间求和)
- poj 3468 (线段树区间更新及求和)
- 线段树(成段更新,区间求和lazy操作 )
- HDU 1166 单点更新 区间求和(ZKW 线段树)
- hdu1166 敌兵布阵(线段树单点更新+区间求和)
- HDU1698(线段树区间更新求和)
- poj2352Stars【线段树单点更新区间求和】
- 线段树单点更新 区间求和,求最值
- leetCode_线段树、单点更新、区间求和
- 线段树,成段更新,区间求和
- HDU1166 线段树区间求和,单点更新
- CodeForces 52C Circular RMQ(区间循环线段树,区间更新,区间求和)
- MySQL join
- MyEclipse导入项目,发现项目编码与文件编码不一致的问题解决
- iOS开发27-iOS 可视化编程-Size Classes
- 刘下记录:ImageView.scaleType 属性全解析(含视频)
- Jackson和fastjson简单用法及性能对比
- 线段树 (区间更新求和)
- C++实现广义表
- Linux基础学习(二)-用户及文件权限管理
- 总是想把Linux服务器上的重要文件备份到本地,在此转一篇实现windows和linux互传文件的文章
- etcd:从应用场景到实现原理的全方位解读
- 【Android】Android工具函数整理
- 接口和抽象类有什么区别
- 复制对象
- HDU 4127 Flood-it!(IDA*搜索)