题面

已知一个数列,你需要进行下面两种操作:
1.将某区间每一个数加上x
2.求出某区间每一个数的和

题解

区间修改+区间查询
线段树模板

#include<iostream>
#define maxn 100010
#define lch p<<1
#define rch p<<1|1
using namespace std;
typedef long long LL;
struct node{LL val, addmark;
}sgt[maxn<<2];
void pushdown(LL p, LL l, LL r){if(sgt[p].addmark != 0){LL t = sgt[p].addmark, m = l+r>>1;sgt[lch].addmark += t;sgt[rch].addmark += t;sgt[lch].val += t*(m-l+1);sgt[rch].val += t*(r-m);sgt[p].addmark = 0;}
}
void update(LL p, LL l, LL r, LL L, LL R, LL v){if(l > R || r < L)return ;  //越界返回if(L <= l && R >= r){sgt[p].addmark += v;sgt[p].val += v*(r-l+1);return ;}pushdown(p, l, r);//记得pushdown 的位置  每次递归前LL m = l+r>>1;update(lch, l, m, L, R, v);update(rch, m+1, r, L, R, v);sgt[p].val = sgt[lch].val + sgt[rch].val;
}
LL query(LL p, LL l, LL r, LL L, LL R){if(l > R || r < L)return 0;  //越界返回if(L <= l && R >= r)return sgt[p].val;pushdown(p,l,r);LL m = l+r>>1, ans = 0;ans += query(lch, l, m, L , R);ans += query(rch, m+1, r, L , R);return ans;
}
int main(){LL n, m;cin>>n>>m;for(int i = 1; i <= n; i++){LL x;  cin>>x;update(1, 1, n, i, i, x);}for(int i = 1; i <= m; i++){LL op;  cin>>op;if(op == 1){LL x, y, k;  cin>>x>>y>>k;update(1,1,n,x,y,k);}else{LL x, y;  cin>>x>>y;cout<<query(1, 1, n, x, y)<<"\n";}}return 0;
}

【luogu3372】线段树 1 模板相关推荐

  1. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解

    题目链接:雨天的尾巴 本题本身是一个非常简单的一道树上差分的模板题,但是由于变态的数据范围,我们直接用数组是存不下的(本来使用一颗普通的线段树直接维护最大值即可.但是本题的空间只有128MB,直接按照 ...

  2. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序

    problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...

  3. 蒟蒻的线段树入门模板笔记

    线段树适合处理那些问题? 线段树是算法竞赛中常用的用来维护 区间信息 的数据结构. 线段树可以在O(logN)的时间复杂度内实现单点修改.区间修改.区间查询(区间求和,求区间最大值,求区间最小值,求区 ...

  4. BZOJ4034 树上操作(树剖 线段树大模板)

    BZOJ4034 long long 是大坑点 貌似long long 跟int 乘起来会搞事情?... A了这题线段树和树剖的基础OK 嘛 重点过掉的还是线段树区间更新的lazy tag吧 #inc ...

  5. 2018.07.11 线段树基本模板复习

    白天听了一天的dpdp,晚上复习一下线段树的板子 //线段树维护区间增加(减少),区间最大值,区间最小值,区间和 #include<bits/stdc++.h>//宏命令替换常量和左右儿子 ...

  6. codevs 4927 线段树练习5 线段树基本操作模板

    4927 线段树练习5  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b ...

  7. 线段树扫描线模板(求面积和周长) Picture

    求面积: #include <iostream> #include <stdio.h> #include <algorithm> using namespace s ...

  8. 线段树 区间更新模板

    一个带区间修改的线段树求和模板: int MAXN = 100005; ll a[100005<<2],ans,p; struct Tree {ll l,r;ll sum,add,mul; ...

  9. 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)

    题目链接:点击查看 题目大意:给出一棵树,再给出 m 次操作,每次操作会选择两个点 ( x , y ) ,使得这条路径上的所有点的种类 z 加一,最后问每个点的哪个种类出现的频率最高,若多个种类出现频 ...

最新文章

  1. hive动态分区shell_Hive动态分区 参数配置及语法
  2. Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
  3. 趣学python3(23)-队列
  4. 一文看尽8篇目标检测最新论文(EfficientDet/EdgeNet/ASFF/RoIMix/SCL/EFGRNet等)
  5. 我的世界服务器刷怪笼怎么修改,我的世界改造刷怪笼的方法,有三种方法介绍...
  6. 数学趣题——魔幻方阵
  7. 【Java HashMap】常用函数的使用
  8. web前端时间戳转时间类型显示
  9. sdl2 opengl d3d9的mipmap和各项异性过滤渲染
  10. linux存储格式化和挂载
  11. 记坑 ----- Arrays.sort()
  12. 关于电力系统标准规约的一些理解
  13. python爬虫之cookie和session介绍——以12306验证码破解和浏览车次为例
  14. MIPI接口和DVP接口摄像头学习笔记
  15. 桌面计算机图标无法附到任务栏,win7系统电脑快捷方式无法添加到任务栏的解决方法...
  16. VSCODE设置绿豆沙主题
  17. 【11】Kotlin项目实操之高阶函数二
  18. SQL SELECT完整语法
  19. :“Entry point was not found.” 如何解决
  20. pytorch中dataloader的num_workers参数

热门文章

  1. 辨异 —— 有两人生日在同一天、只有两人生日在同一天
  2. 自反馈与 Mandelbrot set
  3. ceil() 与 floor() 与 round()
  4. Scala 类型、数值类型及类型转换
  5. C 标准库——cmath/math.h
  6. Python基础——zip
  7. 自学python到什么程度可以找工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  8. python画简便的图-python 实现在一张图中绘制一个小的子图方法
  9. python是什么意思-python是什么
  10. php和python-python与php比较