HDU4348 To the moon题解(主席树区间修改模板)
此题可以作为可持久化线段树区间修改的模板题于罗勇军老师的《算法竞赛上册》4.4 可持久化线段树的区间更新部分被简单提及了一嘴 —— 说是按标准主席树编码即可然而并没有给出具体做法可能是不想限制大家的想法吧。但实际上也并不是直接按照标准主席树编码那么简单这种需要可持久化的区间操作引入了一个新的操作 —— 标记永久化话不多说直接进入主题。题解简化题意给定一个长度为的序列以及个操作操作有如下四种给内的每个数加上并将时间加。查询当前内所有数的和。查询时内所有数的和。返回时间。其中当前时间初始为只有操作才会使增加如果选择返回时间则之后的操作全部作废。思路当读到查询历史时间的区间和时会发现这题需要可持久化并且就是每个树根的编号。那么考虑如何实现区间修改。首先区间操作为了防止爆时间懒标记肯定时需要的。但如果像普通线段树一样每次访问到一个结点就下传标记那么会使得历史结点的值被改变。怎么办呢方法一容易想到的一种方案是每次下传的时候创建两个子结点继承上一个版本的信息后再下传懒标记。显然这一方案十分的正确然而这题仅给了 64M 的空间把这个单次操作产生的空间约为的方案 pass 掉了。所以得考虑另一种方法就是 标记永久化。方法二 - 标记永久化什么是标记永久化就是字面意思将懒标记打完以后就放在那个结点再也不动了会被新版本继承但不会再被下传这样就避免了更改历史结点的问题。然后就是如何利用标记永久化求和这样想如果直接询问根节点那么子结点的标记肯定没法计算所以上传操作 (即 updata) 仍然需要如果有一个结点存在标记那么它的整棵子树都要增加数值若询问的区间在它子树内而标记又不能下传难以直接计算所以开一个变量 Sum_Tag 来记录经过该结点时增量通过 Sum_Tag 统计从根一路到达目标区间的增量。如此一来单次操作产生的空间约为在满足空间需求的条件下实现了区间修改和查询。代码思路讲完了更具体的细节见代码#include#includeusing namespace std;typedef long long ll;const int N1e55;int n,m,T;ll a[N];int tid,rt[N];struct Tree{int ls,rs,tag;ll sum;Tree() {lsrssumtag0;}}tr[N*25];#define mid ((lr)1)void updata(int p,int l,int r){int lstr[p].ls;int rstr[p].rs;tr[p].sumtr[ls].sumtr[rs].sum(r-l1)*tr[p].tag;//加上自身区间的增量}void build(int p,int l,int r){ptid;if(lr){tr[p].suma[l];return ;}build(tr[p].ls,l,mid);build(tr[p].rs,mid1,r);updata(p,l,r);}void modify(int lp,int p,int l,int r,int x,int y,ll v){ptid;tr[p]tr[lp];if(xlry){tr[p].tagv;tr[p].sum(r-l1)v;return ;}if(xmid) modify(tr[lp].ls,tr[p].ls,l,mid,x,y,v);if(midy) modify(tr[lp].rs,tr[p].rs,mid1,r,x,y,v);updata(p,l,r);}ll query(int p,int l,int r,int x,int y,ll Sum_Tag){//通过Sum_Tag累计从根到目标区间的所有增量if(xlry) return tr[p].sumSum_Tag(r-l1);//添加累计增量ll ans0;//进入子区间时才给Sum_Tag增加自身的tagif(xmid) ansquery(tr[p].ls,l,mid,x,y,Sum_Tagtr[p].tag);if(midy) ansquery(tr[p].rs,mid1,r,x,y,Sum_Tagtr[p].tag);return ans;}#undef midint main(){while(scanf(“%d%d”,n,m)!EOF){for(int i1;in;i){scanf(“%lld”,a[i]);}Ttid0;build(rt[T],1,n);char op;int l,r,d,t;for(int i1;im;i){cinop;if(op’C’){scanf(“%d%d%d”,l,r,d);modify(rt[T],rt[T1],1,n,l,r,d);T;}else if(op‘Q’){scanf(“%d%d”,l,r);printf(“%lld\n”,query(rt[T],1,n,l,r,0));}else if(op‘H’){scanf(“%d%d%d”,l,r,t);printf(“%lld\n”,query(rt[t],1,n,l,r,0));}else if(op‘B’){scanf(“%d”,t);Tt;}}}return 0;

相关新闻

轻盈美学:一份专业的机构选品与合作参考指南

轻盈美学:一份专业的机构选品与合作参考指南

在轻医美行业快速迭代的今天,“轻盈美学”正成为越来越多机构和求美者共同关注的方向。它不追求过度改变,而是强调以更自然、更克制的方案,帮助求美者展现个性化的状态。但对于B端机构而言,想要搭建优质的轻盈美学项目体系&#x…

2026/7/19 4:31:35阅读更多 →
零门槛大模型训练:一台笔记本,一个EXE,双击搞定!

零门槛大模型训练:一台笔记本,一个EXE,双击搞定!

前言:为什么今天要自己动手训练大模型? 在AI技术席卷全球的今天,ChatGPT、Claude、Gemini等大模型应用已无处不在。然而,对于大多数开发者或爱好者而言,大模型训练依然笼罩着一层神秘面纱——复杂的分布式计算、天价的…

2026/7/19 4:29:35阅读更多 →
SpringBoot+Vue3停车场管理系统:从环境配置到核心业务实现

SpringBoot+Vue3停车场管理系统:从环境配置到核心业务实现

智慧停车场管理系统这类项目最值得关注的不是功能有多全,而是能不能在普通开发环境下稳定跑起来。很多人在做Java课设或毕设时,最头疼的不是写业务代码,而是环境配置、前后端联调和数据库初始化这些前置环节。这个基于SpringBootVue3的停车场…

2026/7/19 4:29:35阅读更多 →
Android LiveData核心机制与最佳实践详解

Android LiveData核心机制与最佳实践详解

1. LiveData核心机制解析LiveData作为Android Jetpack架构组件中的关键成员,其设计哲学源于对Android生命周期特性的深度理解。与常规观察者模式不同,LiveData实现了真正的生命周期感知能力,这种能力通过三个核心机制实现:生命周期…

2026/7/19 8:11:58阅读更多 →
Steam Audio实战排雷:从集成到优化的五大问题与解决方案

Steam Audio实战排雷:从集成到优化的五大问题与解决方案

1. 项目概述:为什么你的音频项目总在Steam Audio上“翻车”?做游戏音频开发,尤其是涉及到空间音频和物理建模时,Steam Audio绝对是一个绕不开的名字。它免费、开源、功能强大,背后还有Valve这样的巨头支持,…

2026/7/19 8:11:58阅读更多 →
安卓逆向工程环境搭建与工具链配置指南

安卓逆向工程环境搭建与工具链配置指南

1. 安卓逆向环境搭建的必要性与核心组件 在移动安全研究、漏洞挖掘和恶意软件分析领域,安卓逆向工程是一项基础且关键的技能。不同于正向开发,逆向工程需要一套特殊的环境配置,既要具备常规安卓开发的工具链,又需要集成反编译、动…

2026/7/19 8:11:58阅读更多 →
BabelDOC:3步实现专业PDF文档的完美双语翻译

BabelDOC:3步实现专业PDF文档的完美双语翻译

BabelDOC:3步实现专业PDF文档的完美双语翻译 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为PDF文档翻译后格式错乱而烦恼吗?BabelDOC是一款开源的智能文档翻译引…

2026/7/19 8:11:58阅读更多 →
大数据时代的数据收集:方法、技术与实践

大数据时代的数据收集:方法、技术与实践

1. 大数据时代的基石:数据收集入门指南当我在2015年第一次接触大数据项目时,曾天真地以为数据收集就是简单地从数据库导出CSV文件。直到面对日均TB级的日志数据时,才真正理解数据收集作为大数据流水线第一环的关键性。数据收集的质量直接决定…

2026/7/19 8:11:58阅读更多 →
考研失败后16个月技术突击:从零构建Java、前端、Python项目经验

考研失败后16个月技术突击:从零构建Java、前端、Python项目经验

对于计算机专业考研失败的同学来说,2026年就业确实面临"三无"困境:无项目经验、无实习经历、无实操能力。但这不代表没有机会,关键在于如何用剩余时间高效突击,把基础知识转化为就业竞争力。 这篇文章直接切入正题&…

2026/7/19 8:09:58阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →