假设法做线段树

news2024/11/19 9:31:02

合并lazy-tag:指的是把一些能合并的合并了,如果有多种 lazy-tag 的话,每一层最多只存在一个tag。

下面,这是一道区间乘与区间加的混合。

P3373 【模板】线段树 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P3373

ps:(sum、add、len、mul,分别表示当前区间的区间和、加标记、长度,乘标记)

总的说来,我们可以把这道题分为两种情况:

1、先加后乘: sum = (sum+add*len ) * mul  

2、先乘后加: sum = sum*mul +add*len  

然后尝试一下能不能合并为一种情况。

对于1,我们只要把它展开: sum = sum*mul + add*mul * len

我们发现,这两种形式是相同的。

我们就可以考虑将他们写在同一个pushdown里面。

这样向下传递完了之后,mul和add标记都被清除

所以我们的pushdown可以这样写:

void pushdown1(int pos) {

	ll mid = (L + R) >> 1;
	Lv = ((Lv * Mul) + Add * (mid - L + 1)) % mod;
	Rv = ((Rv * Mul) + Add * (R -mid)) % mod;


	LMul = (LMul * Mul) % mod;
	RMul = (RMul * Mul) % mod;


	LAdd = (LAdd*Mul  + Add) % mod;
	RAdd = (RAdd*Mul  + Add) % mod;


	Add = 0;
	Mul = 1;

}

这时候,又有疑问了,因为我们只有在先加后乘的情况下,左右儿子的加法标记才能更新为:LAdd*Mul + Add 的形式啊。

为什么 先乘后加 和 先加后乘 共用一个 pushdown?

先乘后加中下传的add为什么要乘mul?

正是因为它们形式是一样的,共用了一个pushdown后可以同时清除两个标记,然后诡异的使得每个pos中只有一个标记!

这个很抽象,请往下看。

在这道题中:

要么没有标记,要么只有加标记,要么只有乘标记。

如果是先乘后加,那么其实乘标记的值是1.

所以不会影响正确的值。

那我是怎么得出这个结论的呢?

// 乘法操作
void mul(int pos, int ql, int qr, int val) {

	pushdown1(pos);
	if (ql <= L and qr >= R) {
		Mul = (Mul * val) % mod;
		V = (V * val) % mod;
		return;
	}


	ll mid = (L + R) >> 1;
	if (ql <= mid)mul(lson, ql, qr, val);
	if (qr > mid)mul(rson, ql, qr, val);


	pushup(pos);
	return;
}


//加法操作
void add(int pos, int ql, int qr, int val) {
	pushdown1(pos);
	if (ql <= L and qr >= R) {

		V = (V + (R - L + 1) * val) % mod;
		Add = (Add + val) % mod;

		return;
	}

	ll mid = (L + R) >> 1;
	if (ql <= mid)add(lson, ql, qr, val);
	if (qr > mid)add(rson, ql, qr, val);


	pushup(pos);
	return;
}

注意看我写的乘法和加法操作。

pushdown放在了if判断的前面。

可以证明当我们还没进入if 的时候,我们就已经执行了pushdown。

然后进入if之后,此时pos的所有标记已经被初始化了。

而,进入if后,每次执行乘法或加法的时候,只会更新乘法标记或加法标记。

所以,理论上是每一个pos最多只有一种标记的。

所以这道题就能解释的清楚了。

然后我们捋一下思路:

知道这道题中,每个pos只存在一种lazy-tag。

然后将这题分成两种情况:

先加后乘,先乘后加。

发现先加后乘可以整理为先乘后加的形式。

只用一个pushdown就可以写完这道题。


但这种方法不是万能 的,因为条件很苛刻,要求两种tag pushdown 的形式一样。

看下面这道题:

P1253 扶苏的问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1253

明显地,这是一道区间修改+区间加的题目。

比上面那一道题简单一点。

其实,我们还是可以分成两种情况。

先修改后加。

先加后修改。

对于第一种情况:先修改后加。

区间最大值维护:maxn =maxn + add

第二种情况:先加后修改。

区间和维护:maxn = rev

很明显,这无法合并。因为二者形式并不同。

所以,并不适用于所有的题目,还需要自己进行分析,这只是一种理解的小技巧

 

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

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

相关文章

静态网页设计——红旗汽车官网(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1gK411x7Bg/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

基于SSM框架和Layui框架的管理系统

计算机毕业设计&#xff1a;打造安全、高效的信息管理系统在这个数字化时代&#xff0c;信息安全和高效管理是至关重要的。为了帮助学校或机构更好地管理和保护信息&#xff0c;我们为您设计了一套功能强大的信息管理系统。该系统利用先进的技术&#xff0c;结合MD5加密&#x…

250:vue+openlayers 加载geotiff文件,并在地图上显示

第250个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载geotiff文件,并在地图上显示。这里使用到了WebGLTile图层和GeoTIFF脚本模块。这里一定要注意GeoTIFF的数据加载方式,要数组的模式。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现…

Java学习——设计模式——行为型模式1

文章目录 行为型模式模板方法策略模式命令模式责任链模式 行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;涉及算法与对象间职责的分配。 行为型模式分为类行为模式和…

喜讯频传!安全狗获评CCIA“2023年度先进会员单位”

1月4日&#xff0c;2023年度中国网络安全产业联盟会员大会暨理事会在北京成功举办。 作为国内云原生安全领导厂商&#xff0c;安全狗也受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&#xff0c;是国内领先的云安…

C#高级 09 IEnumerable可枚举类型--可迭代类型

了解Linq操作需先了解IEnumerable可枚举类型–可迭代类型&#xff0c;因为Linq中的很多函数的返回值类型和传入的形参类型都是IEnumerable的。 IEnumerable可枚举类型–可迭代类型 只要一个类型实现了IEnumerable接口&#xff0c;就可以对这个类型进行遍历。 首选来看IEnumer…

力扣题:高精度运算-1.4

力扣题-1.4 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;306. 累加数 解题思想&#xff1a;首先先通过secondStart和secondEnd可以确定num1 num[0:secondStart],num2 num[secondStart:secondEnd]&#xff0c;然后遍历secondStart和secondEnd…

理解二叉树的遍历(算法村第七关白银挑战)

二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]解 LeetCode以及面试中提供的方法可能…

如何使用WebSecProbe对Web应用程序执行复杂的网络安全评估

关于WebSecProbe WebSecProbe是一款功能强大的Web应用程序网络安全评估工具&#xff0c;该工具专为网络安全爱好者、渗透测试人员和系统管理员设计&#xff0c;可以执行精确而深入的复杂网络安全评估。 该工具简化了审查网络服务器和应用程序的复杂过程&#xff0c;允许广大研…

计算机创新协会冬令营——暴力枚举题目06

我给大家第一阶段的最后一道题就到这里了&#xff0c;下次得过段时间了。所以这道题简单一点。但是足够经典 下述题目描述和示例均来自力扣&#xff1a;两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target …

CAVER: Cross-Modal View-Mixed Transformer for Bi-Modal Salient Object Detection

目录 一、论文阅读笔记&#xff1a; 1、摘要&#xff1a; 2、主要贡献点&#xff1a; 3、方法&#xff1a; 3.1 网络的总体框架图&#xff1a; 3.2 Transformer-based Information Propagation Path (TIPP) 3.3 Intra-Modal/Cross-Scale Self-Attention (IMSA/CSSA) Q1…

谷歌Google插件离线导出、安装

离线导出&#xff1a; 1.进入当前用户路径下&#xff1a; %userprofile%\AppData\Local\Google\Chrome\User Data\Default\Extensions 2.详情查看ID,即对应上述文件夹路径下插件文件名&#xff01; 3.压缩成ZIP包! 离线导入&#xff1a; 1.打开开发者模式 2.导入上述解压的压…

MySQL基础笔记(5)DCL数据控制语句

数据控制语句&#xff0c;用来管理数据库用户、控制数据库的访问权限~ 目录 一.用户管理 1.查询用户 2.创建用户 3.修改用户密码 4.删除用户 二.权限管理 1.查询权限 2.授予权限 3.撤销权限 一.用户管理 1.查询用户 use MySQL; select * from user; 2.创建用户 crea…

【C/C++】轻量级跨平台 开源串口库 CSerialPort

文章目录 1、简介2、支持的平台3、已经支持的功能4、Linux下使用5、使用vcpkg安装CSerialPort6、交叉编译7、效果图8、基于CSerialPort的应用8.1、CommMaster通信大师8.2、CommLite串口调试器 1、简介 Qt 的QSerialPort 已经是跨平台的解决方案&#xff0c;但Qt开发后端需要 Q…

高性价比的高速吹风机/高速风筒解决方案,基于普冉单片机开发

高速吹风机是今年非常火的一款产品&#xff0c;快速崛起并颠覆了传统吹风机&#xff0c;高速吹风机也成为了传统吹风机替代的一个大趋势。高速吹风机是利用高转速产生的大风量来快速吹干头发&#xff0c;由于其精巧的外观设计、超低的噪声、出色的干发效果&#xff0c;高速吹风…

篇二:springboot2.7 OAuth2 server使用jdbc存储RegisteredClient

上一篇 <<springboot 2.7 oauth server配置源码走读一>>中简单描述了oauth2 server的配置&#xff0c;其中使用了内存保存 RegisteredClient&#xff0c;本篇改用mysql存储。 db存储需要创建表&#xff0c;表结构应该是什么样的呢&#xff0c;从spring给我们封装好…

国际光伏展

国际光伏展是一个专门展示和推广光伏技术和产品的国际性展览会。光伏技术是一种利用光能转化为电能的技术&#xff0c;被广泛应用于太阳能发电系统和其他可再生能源系统中。国际光伏展汇集了来自全球的光伏企业、研究机构和专业人士&#xff0c;展示最新的光伏产品、技术和解决…

量子经济应用新道路!德国旗舰项目PlanQK首次公布研究成果

&#xff08;图片来源&#xff1a;网络&#xff09; 作为人工智能创新竞赛的一部分&#xff0c;由量子开放平台和生态系统公司Anaqor AG与斯图加特大学牵头、联邦经济事务和气候保护部资助的PlanQK研究项目&#xff0c;经过四年的深入研究&#xff0c;于近期公布了其研究成果&…

圣诞节来临,如何用海外云手机给亚马逊店铺引流?

马上就要到圣诞节了&#xff0c;这是一年中冲刺销售量的最后一个好机会&#xff0c;对所有亚马逊卖家都十分重要。而无论是亚马逊新手卖家还是老卖家&#xff0c;要想在激烈的竞争中取胜&#xff0c;仅仅靠产品本身是不现实的&#xff0c;通过测评和社媒引流获取更多曝光和流量…

如何使用 NFTScan NFT API 在 PlatON 网络上开发 Web3 应用

PlatON 是由万向区块链和矩阵元主导开发的面向下一代的全球计算架构&#xff0c;创新性的采用元计算框架 Monad 和基于 Reload 覆盖网络的同构多链架构&#xff0c;其愿景是成为全球首个提供完备隐私保护能力的运营服务网络。它提供计算、存储、通讯服务&#xff0c;并提供算力…