——————————————————————已识乾坤大,犹怜草木青。

先介绍一篇优秀的洛谷博文:https://www.luogu.org/problemnew/solution/P3372

-----------------------------------------------------------------------------------------------------------------------------------------------

lazy tag:

皎月半酒花说:

首先,懒标记(lazy tag)的作用是记录每次、每个节点要更新的值,也就是delta,但线段树的优点不在于全记录,而在于传递式记录:

整个区间都被操作,记录在公共祖先节点上;只修改了一部分,那么就记录在这部分的公共祖先上;如果四环以内只修改了自己的话,那就只改变自己。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

题目见此:https://www.luogu.org/problem/P3372

#include<iostream>
#include<cstdio>
#define MAXN 1000001
#define ll long long
using namespace std;
unsigned ll n,m,a[MAXN],ans[MAXN<<2],tag[MAXN<<2];
inline ll ls(ll x)
{return x<<1;
}
inline ll rs(ll x)
{return x<<1|1;
}
void scan()
{cin>>n>>m;for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
}
inline void push_up(ll p)
{ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(ll p,ll l,ll r)
{tag[p]=0;if(l==r){ans[p]=a[l];return ;}ll mid=(l+r)>>1;build(ls(p),l,mid);build(rs(p),mid+1,r);push_up(p);
}
inline void f(ll p,ll l,ll r,ll k)
{tag[p]=tag[p]+k;ans[p]=ans[p]+k*(r-l+1);
}
inline void push_down(ll p,ll l,ll r)
{ll mid=(l+r)>>1;f(ls(p),l,mid,tag[p]);f(rs(p),mid+1,r,tag[p]);tag[p]=0;
}
inline void update(ll nl,ll nr,ll l,ll r,ll p,ll k)
{if(nl<=l&&r<=nr){ans[p]+=k*(r-l+1);tag[p]+=k;return ;}push_down(p,l,r);ll mid=(l+r)>>1;if(nl<=mid)update(nl,nr,l,mid,ls(p),k);if(nr>mid) update(nl,nr,mid+1,r,rs(p),k);push_up(p);
}
ll query(ll q_x,ll q_y,ll l,ll r,ll p)
{ll res=0;if(q_x<=l&&r<=q_y)return ans[p];ll mid=(l+r)>>1;push_down(p,l,r);if(q_x<=mid)res+=query(q_x,q_y,l,mid,ls(p));if(q_y>mid) res+=query(q_x,q_y,mid+1,r,rs(p));return res;
}
int main()
{ll a1,b,c,d,e,f;scan();build(1,1,n);while(m--){scanf("%lld",&a1);switch(a1){case 1:{scanf("%lld%lld%lld",&b,&c,&d);update(b,c,1,n,1,d);break;}case 2:{scanf("%lld%lld",&e,&f);printf("%lld\n",query(e,f,1,n,1));break;}}}return 0;
}

相关函数的熟悉可以以此当做模板样子丫!

建树,区间修改,区间查询这样的函数当每日三省,无比熟稔之!

转载于:https://www.cnblogs.com/dragondragon/p/11254716.html

线段树进阶之模板观见相关推荐

  1. 【总结】线段树 进阶

    我竟然开了这么多坑...ε=(´ο`*)))唉,慢慢填吧... 线段树 进阶 前置芝士 然后我们来讲一个好玩的东西,叫权值线段树. 权值线段树&动态开点 有一个数列,数列里的每个不同的 aia ...

  2. 51nod3077 线段树进阶1

    3077 线段树进阶1 给出一个长度为n的整数序列a1,a2,-,an,进行m次操作,操作分为两类. 操作1 ​:给出l,r,v,将al,al+1,-,ar分别加上v. 操作2 ​:给出l,r,询问 ...

  3. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  4. 线段树 区间更新模板

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

  5. 数据结构之线段树进阶(区间更新lazy标记)

    之前说了线段树的点更新和区间求和.其实点更新是区间更新的一种最基础的做法.我们把一个点想像成一个区间的话,不就是最简单的区间更新了嘛. 为什么要把区间更新和点更新分开来看呢?假如我们对区间[l,r]进 ...

  6. 【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)

    我似乎很少写这种算法博客 可持久化线段树概念 概念介绍(类比帮助理解) 简单分析一下时间和空间复杂度(内容池) 模板 结构体变量 建树模板 单点修改模板 单点查询模板 区间修改模板(pushup) 区 ...

  7. 线段树(SegmentTree)基础模板

    线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /*** Definition ...

  8. 浅谈数据结构之主席树(线段树进阶版)

    今天看了点主席树的概念,加上飞哥上次讲的,目前对主席树有了大致的了解,简单谈谈吧,不讲代码,只讲思路,日后贴题! Orz高级数据结构发明者主席!!最早在CLJ的课件里第一次看到了这个词,最近做区间第K ...

  9. 线段树进阶(懒惰标记)

    对于朴素线段树,要进行区间更新,如果按照单点更新的方法更新,他的复杂度很高,比数组暴力更新还要慢. 所以我们使用懒惰标记,他走到包含区间就不往下走了,然后就更新区间值,并打上懒惰标记.那走到这不走了, ...

最新文章

  1. C库函数-fgets()
  2. topcoder srm 410 div1
  3. 十大经典排序算法5(Python版本)
  4. 【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好...
  5. Boost.Interprocess
  6. c++输出小数点后几位_Python格式化输出:%s和format()用法比较
  7. 图像风格迁移 CycleGAN原理
  8. Apeaksoft iOS Toolkit for Mac(iOS设备数据恢复软件)
  9. 360怎样修改wifi服务器,360路由器怎么设置无线网络
  10. 【MySQL】听柠檬班公开课后,学习笔记及作业(一)
  11. 最小二乘法线性拟合及其代码实现(C语言)
  12. spring boot新闻管理系统 毕业设计源码211113
  13. redis基础数据结构(一)可变长字符串sds
  14. 中国房屋租赁行业市场发展趋势与竞争创新战略建议报告2022-2028年
  15. 面试被问项目经验不用慌,按这个步骤回答绝对惊艳
  16. php敏感字符串过滤_PHP实现的敏感词过滤方法
  17. 软件测试 - 缺陷管理篇
  18. 记事本保存音标出现乱码问题
  19. 几种百度云盘下载速度慢解决方法,彻底让你直接拉满宽带
  20. activiti工作流架构介绍及集成实现

热门文章

  1. 高级数据结构(Ⅱ)优先队列(Priority Queue)
  2. IT圈子里鬼混,谈谈IT行业的收入和一些生存之道(转)
  3. 阿里云平台的人脸识别接口测试
  4. 人脸识别签到 电子班牌加速校园智慧化进程
  5. 支付宝小程序Swiper 滚动图 带圆点和跳转方式
  6. 如何通过视频号变现300万,聊聊IP的定位、产品和变现
  7. MSE考研百日冲刺-98
  8. springsecurity登录后依然跳回登录页面的问题
  9. 如何成为一位 hacker
  10. python写公式函数_根据公式生成函数(Python)