线段树多懒标记

news/2026/1/18 21:15:39/文章来源:https://www.cnblogs.com/jjjxs/p/19110726

最近在思考:如何对一个序列维护带有两种区间修改的多查询问题。这样不可避免地需要对两种修改操作分别维护一种懒标记。但显然,不能将两种懒标记独立看待,因为对于两种操作,先后顺序不同会造成不同的影响。因此如何处理两个懒标记之间的相互影响至关重要, \(pushdown\) 函数需要精心设计。

这里口胡两种情况(不一定对),阐述一下设计懒标记的原理。

区间加与区间乘

考虑两种操作的先后顺序:

  1. 先乘后加:直接进行即可
  2. 先加后乘:加的部分也需要乘,再作和
void pushdown(int p){if(tr[p].add == 0 && tr[p].mul == 1) return;tr[lc].sum = (tr[lc].sum * tr[p].mul) + tr[p].add * (tr[lc].r - tr[lc].l + 1);tr[rc].sum = (tr[rc].sum * tr[p].mul) + tr[p].add * (tr[rc].r - tr[rc].l + 1);// 先处理乘法懒标记,再处理加法懒标记tr[lc].mul = tr[lc].mul * tr[p].mul;tr[rc].mul = tr[rc].mul * tr[p].mul;tr[lc].add = tr[lc].add * tr[p].mul + tr[p].add;tr[rc].add = tr[rc].add * tr[p].mul + tr[p].add;tr[p].add = 0;tr[p].mul = 1;
}

区间加与区间赋值 (查询区间最大值)

// max
template<typename T>
struct SegTree
{struct Node{int l, r;T maxv, tag_fix, tag_add;}tr[maxn << 2];#define lc p<<1#define rc p<<1|1void pushup(int p){tr[p].maxv = max(tr[lc].maxv, tr[rc].maxv);}void pushdown(int p){if(tr[p].tag_fix != -1){tr[lc].maxv = tr[rc].maxv = tr[p].tag_fix; }if(tr[p].tag_add){tr[lc].maxv += tr[p].tag_add;tr[rc].maxv += tr[p].tag_add;}if(tr[p].tag_fix != -1){tr[lc].tag_fix = tr[rc].tag_fix = tr[p].tag_fix;tr[lc].tag_add = tr[rc].tag_add = 0;}if(tr[p].tag_add){tr[lc].tag_add += tr[p].tag_add;tr[rc].tag_add += tr[p].tag_add;}tr[p].tag_fix = -1;tr[p].tag_add = 0;}void build(int p, int l, int r,auto& arr){tr[p] = { l,r,arr[l],-1,0};if (l == r) return;int mid = l + r >> 1;build(lc, l, mid , arr);build(rc, mid + 1, r , arr);pushup(p);}void update_fix(int p, int l, int r, T k){if (l <= tr[p].l && tr[p].r <= r) {tr[p].maxv = k;tr[p].tag_fix = k;tr[p].tag_add = 0;return;}int mid = tr[p].l + tr[p].r >> 1;pushdown(p);if (l <= mid) update_fix(lc, l ,r, k);if (r > mid)  update_fix(rc, l ,r, k);pushup(p);}void update_add(int p, int l, int r, T k){if (l <= tr[p].l && tr[p].r <= r){tr[p].maxv += k;tr[p].tag_add += k;return;}int mid = tr[p].l + tr[p].r >> 1;pushdown(p);if (l <= mid) update_add(lc, l ,r, k);if (r > mid)  update_add(rc, l ,r, k);pushup(p);}T querymax(int p, int l, int r){if (l <= tr[p].l && tr[p].r <= r) return tr[p].maxv;pushdown(p);int mid = tr[p].l + tr[p].r >> 1;T maxv = INT_MIN;if (l <= mid) maxv = max(maxv, querymax(lc, l, r));if (r > mid) maxv = max(maxv, querymax(rc, l, r));return maxv;}};

线段树多懒标记设计相关例题:
ABC441 G
code

edu23 F
code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue基于Python 新疆特色美食电商平台设计与实现flask django Pycharm

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

Python+Vue的 林海生态园自动销售门票管理系统 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

Python+Vue的笔记管理系统的设计与实现 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

GESP认证C++编程真题解析 | 202306 三级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

ESP8266-01S学习笔记

这里写目录标题传模式 vs 非透传模式解析JSON的差异一、透传模式 vs 非透传模式的JSON解析1.1 两种模式下的串口数据格式对比非透传模式&#xff08;默认模式&#xff09;透传模式1.2 两种模式对比表1.3 透传模式设置代码二、堆栈设置问题详解2.1 为什么需要调整堆栈大小&#…

Python+Vue的 美食分享论坛的设计和实现 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

SpringBoot 全局异常处理

文章目录第5章&#xff1a;SpringBoot 全局异常处理SpringBoot全局异常介绍第5章&#xff1a;SpringBoot 全局异常处理 SpringBoot全局异常介绍 什么是全局异常处理&#xff1f; 集中捕获项目中所有未被手动捕获的异常&#xff1b;统一封装成前端可解析的 JSON 格式&#xf…

【顶刊未发表】基于混沌增强领导者黏菌算法CELSMA复杂山地危险模型无人机路径规划附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

计算机小程序毕设实战-基于springboot+微信小程序的服装商城的设计与实现小程序基于微信小程序的在线服装商城店铺的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

提示工程架构师带你领略Agentic AI提示工程自我学习能力的灵活性

Agentic AI提示工程&#xff1a;让你的Prompt学会“自我进化”的灵活之道 引言&#xff1a;传统提示工程的“静态困境”与Agentic AI的破局 你是否遇到过这样的困扰&#xff1f; 精心设计的Prompt在面对多样化的用户问题时&#xff0c;常常“水土不服”——比如针对普通用户的…

Python+Vue的 第三方物流管理系统 django Pycharm flask

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路&#xff01;&#xff01;需要的小伙伴可以发链接或者截图给我 项目介绍 …

STM32F03C8T6通过AT指令获取天气API-下篇

这里写目录标题堆栈大小换算与修改说明一、十六进制到十进制的换算1.1 换算公式1.2 换算结果二、修改前后的对比修改前&#xff08;原始配置&#xff09;&#xff1a;修改后&#xff08;新配置&#xff09;&#xff1a;三、STM32F103C8T6的内存限制四、为什么需要调整堆栈大小&…

2024最新大数据架构趋势:云原生与湖仓一体实战指南

2024大数据架构趋势深度解析&#xff1a;云原生与湖仓一体实战指南 一、引言&#xff1a;为什么说“云原生湖仓一体”是2024大数据的“必选项”&#xff1f; 1.1 一个真实的痛点&#xff1a;企业数据架构的“两难困境” 某零售企业的技术负责人最近很头疼&#xff1a; 数据分散…

小程序毕设选题推荐:基于微信小程序的网上服装商城系统基于springboot+微信小程序的服装商城的设计与实现小程序【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

RAG vs 微调:LLM优化双路径指南 + LLaMA-Factory Online高效落地

RAG vs 微调:LLM优化双路径指南 + LLaMA-Factory Online高效落地在大型语言模型(LLM)应用中,RAG(检索增强生成) 与 微调(Fine-Tuning) 是适配特定任务的两大核心优化方案。而LLaMA-Factory Online作为一站式…

RoMa v2 - MKT

RoMa v2 特别地,航空数据集AerialMD [45]和BlendedMVS [49]的包含,使我们提出的模型对大旋转和空对地视点变化显著更加鲁棒。小基线数据集的包含,如FlyingThings3D [26],使RoMa v2在预测精细细节方面显著更好。我…

小程序计算机毕设之基于springboot+微信小程序的服装购物平台的设计与实现小程序(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

吐血推荐10个一键生成论文工具,专科生毕业论文必备!

吐血推荐10个一键生成论文工具&#xff0c;专科生毕业论文必备&#xff01; 专科生的论文救星&#xff0c;AI 工具如何改变你的写作方式&#xff1f; 在如今的学术环境中&#xff0c;论文写作早已不再是单纯的文字堆砌&#xff0c;而是对逻辑、结构和内容深度的综合考验。尤其是…

AArch64和X86下的函数调用 - Polaris

AArch64和X86下的函数调用 最近在研究llvm-bolt的indirect-call-promotion优化,借着这个机会一并总结下函数调用的概念以及底层的一些相关实现,鉴于知识局限性,部分细节描述可能不到位,欢迎纠正。 函数调用在 CPU层…

MCU单总线通信

文章目录 一、核心原理详解 1. 整体硬件原理 (1)硬件架构核心 (2)STM32 GPIO 配置核心(开漏输出) 2. 忙状态判定原理 (1)核心定义 (2)空闲状态双重侦听规则 (3)STM32 忙状态实现细节 3. 发送实现原理 (1)发送前准备 (2)逐位发送核心逻辑 (3)发送关键注意事项…