1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef unsigned int ui;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define pf printf
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define prime1 1e9+7
  9. #define prime2 1e9+9
  10. #define pi 3.14159265
  11. #define lson l,mid,rt<<1
  12. #define rson mid+1,r,rt<<1|1
  13. #define scand(x) scanf("%llf",&x)
  14. #define f(i,a,b) for(int i=a;i<=b;i++)
  15. #define scan(a) scanf("%d",&a)
  16. #define dbg(args) cout<<#args<<":"<<args<<endl;
  17. #define pb(i) push_back(i)
  18. #define ppb(x) pop_back(x)
  19. #define inf 0x3f3f3f3f
  20. #define maxn 100005
  21. int n,m,t;
  22. ll sum[maxn<<],add[maxn<<];
  23. void pushup(int rt)//上拉
  24. {
  25. sum[rt]=sum[rt<<]+sum[rt<<|];
  26. }
  27. void build(int l,int r,int rt)
  28. {
  29. if(l==r)
  30. {
  31. scanf("%lld",&sum[rt]);
  32. return ;
  33. }
  34. int mid=l+r>>;
  35. build(lson);
  36. build(rson);
  37. pushup(rt);//上拉,维护区间和
  38. }
  39. void pushdown(int rt,int ln,int rn)//lazy tag下推
  40. {
  41. if(add[rt])
  42. {
  43. add[rt<<]+=add[rt];//+=表示该段原先可能就有没有下推的lazy tag
  44. add[rt<<|]+=add[rt];
  45.  
  46. sum[rt<<]+=add[rt]*ln;//一旦lazy tag加到这段区间上就代表区间的sum是准确更新过的
  47. sum[rt<<|]+=add[rt]*rn;
  48. add[rt]=;//lazytag完成转移
  49. }
  50. }
  51. void update(int l,int r,int rt,int L,int R,ll C)
  52. {
  53. if(L<=l&&r<=R)
  54. {
  55. add[rt]+=C;//tag到达之处维护的值也相对应的更新
  56. sum[rt]+=C*(r-l+);
  57. return;
  58. }
  59. int mid=l+r>>;
  60. //在更新子结点之前下推标记,保证更新直到最终结点之前的结点lazytag全部下推
  61. pushdown(rt,mid-l+,r-mid);
  62. if(L<=mid) update(lson,L,R,C);
  63. if(R>mid) update(rson,L,R,C);
  64. pushup(rt);//更新完子节点之后在更新父节点整个update才结束
  65. }
  66. ll query(int l,int r,int rt,int L,int R)
  67. {
  68. if(L<=l&&r<=R)
  69. {
  70. return sum[rt];
  71. }
  72. int mid=l+r>>;
  73. pushdown(rt,mid-l+,r-mid);
  74. ll ans=;
  75. if(L<=mid) ans+=query(lson,L,R);
  76. if(R>mid) ans+=query(rson,L,R);
  77. return ans;
  78. }
  79. int main()
  80. {
  81. //freopen("P3372_2.txt","r",stdin);
  82. //freopen("output.txt","w",stdout);
  83. std::ios::sync_with_stdio(false);
  84. scan(n);scan(m);
  85. build(,n,);
  86. int flag,l,r;
  87. ll k;
  88. while(m--)
  89. {
  90. scan(flag);
  91. if(flag==)
  92. {
  93. scanf("%d%d%lld",&l,&r,&k);
  94. update(,n,,l,r,k);
  95. }
  96. else if(flag==)
  97. {
  98. scan(l);scan(r);
  99. pf("%lld\n",query(,n,,l,r));
  100. }
  101. }
  102. }

洛谷3372线段树模板题 对区间+k或者查询区间和的更多相关文章

  1. 洛谷P3372线段树模板1——线段树

    题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...

  2. 洛谷P3373线段树模板2

    题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...

  3. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  4. hdu1823(二维线段树模板题)

    hdu1823 题意 单点更新,求二维区间最值. 分析 二维线段树模板题. 二维线段树实际上就是树套树,即每个结点都要再建一颗线段树,维护对应的信息. 一般一维线段树是切割某一可变区间直到满足所要查询 ...

  5. [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]

    可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...

  6. HDU 1698 Just a Hook (线段树模板题-区间求和)

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

  7. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  8. 洛谷P3372线段树1

    难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...

  9. POJ - 3264 线段树模板题 询问区间最大最小值

    这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...

随机推荐

  1. IP地址0.0.0.0表示什么

    参考RFC文档: 0.0.0.0/8 - Addresses in this block refer to source hosts on "this"network. Addre ...

  2. UMD: 通用模块规范

    既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范.所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了.

  3. 创建Cocoapods私有库

    本文以自己在公司做的一个手势密码私有库GesturePasswordKit为例说明. 1.在gitlab(或者github,我这里使用的例子是在gitlab上)上创建git仓库 (确保授权正确,避免后 ...

  4. iOS自动化登录测试demo

    <软件自动化测试开发>出版了 测试开发公开课培训大讲堂 微信公众号:测试开发社区 测试开发QQ群:173172133 咨询QQ:7980068 咨询微信:zouhui1003it

  5. Tian Tian 菾菾 导游 陪同

    自画像系列是梵高的代表作之一,他是一位自学成才的画家,下笔完全自由,主观提取了当时印象派画家学到的技巧,在这幅画中,我们可以看到,颜色在画中的堆叠,色彩与笔在画中表现的形态,都表现出,梵高在他作画中内 ...

  6. 从谷歌到脸书:为何巨头纷纷“钟情于”VR相机?

    VR的火爆,自然无需多言.而基于VR这一个概念,已经在多个相关行业不断衍生出新的产品.服务或内容.VR眼镜.VR头盔.VR相机.VR游戏.VR影视.VR应用--但VR产业的发展并不是齐头并进,而是出现 ...

  7. Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定

    一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼.本文主要介绍 同域 和 跨域 两种不同场景单点登录的实现原理,并使用 Spring ...

  8. Java反射,泛型在Json中的运用

    最近项目中遇到了Json数据自动获取的功能,不然令人想起java的反射,已经很长时间没复习java了正好一块连java的这一块内容一起过一遍.java中的反射无疑就相当于java开发者的春天,在众多的 ...

  9. unittest实战(四):用例编写

    import yamlimport unittestfrom selenium import webdriverimport timefrom ddt import ddt, data, unpack ...

  10. Javascript学习笔记-基本概念-操作符

    1.一元操作符 (1)递增和递减操作符 只能操作一个值的操作符叫一元操作符. var age = 29; ++age; var age = 29; --age; var age = 29; var a ...