luogu P4513 小白逛公园

news/2025/10/12 21:35:24/文章来源:https://www.cnblogs.com/lyrgo/p/19086684

题目大意

需要一种数据结构,支持以下两种操作:

  1. 单点修改
  2. 区间求最大连续子段和

Sol

很容易想到线段树
首先我们要维护一个区间和\(sum\)
但是只用\(sum\)不能维护区间最大连续子段和
发现最大连续子段和可以从以下几种方式转移:

  1. 左子区间从右开始最大连续和+右子区间从左开始的最大连续和
  2. 左子区间最大连续子段和
  3. 右子区间最大连续子段和

所以我们需要额外维护:

  1. \(lmax\)表示当前区间从左开始最大连续和
  2. \(rmax\)表示当前区间从右开始最大连续和

考虑\(lmax\)如何转移:

  1. 从左子区间的\(lmax\)转移
  2. 左子区间和+右子区间的\(lmax\)

\(rmax\)同理

注意,在查询时,如果跨越两边,由于所给区间不会完全被某两个区间包裹,我们需要在递归返回过程中重新计算贡献
(也就是返回一个 Node

Code

#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int N = 5e5+10;
const LL INF = 0x3f3f3f3f3f3f3f3f;struct Node {int l , r;LL sum;LL lmax , rmax , dmax;
};int n , m;
int a[N];
Node tr[N*4];void pushup(int x) {tr[x].sum = tr[x<<1].sum + tr[x<<1|1].sum;tr[x].lmax = max(tr[x<<1].lmax , tr[x<<1].sum+tr[x<<1|1].lmax);tr[x].rmax = max(tr[x<<1|1].rmax , tr[x<<1|1].sum+tr[x<<1].rmax);tr[x].dmax = max(tr[x<<1].rmax+tr[x<<1|1].lmax , max(tr[x<<1].dmax , tr[x<<1|1].dmax));
}void build(int x , int l , int r) {tr[x] = {l , r , 0 , 0 , 0 , 0};if(l == r) {tr[x] = {l , r , a[l] , a[l] , a[l] , a[l]};return ;}int mid = (l+r) >> 1;build(x<<1 , l , mid);build(x<<1|1 , mid+1 , r);pushup(x);
}void modify(int x , int l , LL k) {if(tr[x].l == tr[x].r) {tr[x] = {tr[x].l , tr[x].r , k , k , k , k};return;}int mid = (tr[x].l + tr[x].r) >> 1;if(l <= mid) modify(x<<1 , l , k);else modify(x<<1|1 , l , k);pushup(x);
}Node query(int x , int l , int r) {if(l <= tr[x].l && tr[x].r <= r) return tr[x];int mid = (tr[x].l+tr[x].r) >> 1;if(l <= mid && mid < r) {Node t , ls = query(x<<1 , l , r) , rs = query(x<<1|1 , l , r);t.sum = ls.sum + rs.sum;t.lmax = max(ls.lmax , ls.sum + rs.lmax);t.rmax = max(rs.rmax , rs.sum + ls.rmax);t.dmax = max(max(ls.dmax , rs.dmax) , ls.rmax+rs.lmax);return t;}if(r <= mid) return query(x<<1 , l , r);if(l > mid) return query(x<<1|1 , l , r);return Node();
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);cin >> n >> m;for(int i = 1 ; i <= n ; i ++)cin >> a[i];build(1 , 1 , n);while(m --) {int opt , x , y;cin >> opt >> x >> y;if(opt & 1) {if(x > y) swap(x , y);cout << query(1 , x , y).dmax << '\n';} else {modify(1 , x , y);}}return 0;
}

闲话

事实上,这个题被丢在我的题堆里两个月了

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

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

相关文章

20231408徐钰涵课程思维导图Openssl实践

20231408徐钰涵课程思维导图Openssl实践 Ubuntu系统实践过程openssl versionopenssl version -helpopenssl list -helpopenssl -help

案例分析-DNS+tcpdump+wireshark

网络优化,实际上包含了整 个网络协议栈的所有层的优化。 DNS解析速度不稳定DNS(Domain Name System) 域名系统,提供 域名和 IP 地址之间映射关系的查询服务。动态服务发现和全局 负载均衡(Global Server Load Bal…

2025 年卧式离心机厂家 TOP 企业品牌推荐排行榜,LW250/LW350/LW450/LW530/LW540 / 专业卧式离心机推荐这十家公司!

在当前工业生产领域,卧式离心机作为关键的分离设备,广泛应用于食品、饮料、化工、制药、环保等众多行业。然而,行业发展却面临着诸多问题,一方面,市场上卧式离心机品牌数量众多,产品质量参差不齐,部分品牌缺乏核…

2025 年水泥管厂家最新推荐排行榜,国标水泥管,二级水泥管,钢筋混凝土水泥管,大口径水泥管,平口水泥管公司推荐!

在基础设施建设持续推进的当下,水泥管作为排水、输水等工程的核心建材,其质量与供应稳定性直接影响项目进度与长期使用效果。然而当前行业中,部分源头厂家存在产品规格不达标、施工服务脱节、售后保障缺失等问题,比…

Day1 经典Holle word

//导入一个文件,stdio.h std是一个标准库 i是input o是output即标准输入输出库 //h是头文件,但stdio之后可导入的不止头文件 //<>在这里的作用是导入系统文件,""则用来导入自定义文件 #include&l…

内存知识总结

虚拟内存与多级页表 对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。 当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访 …

2025 年金属复合板厂家推荐广东粤洋建材科技有限公司,实力产能与定制服务全景解析金属复合板公司推荐

2025 年铝蜂窝行业正迎来结构性增长机遇,市场规模预计达 110 亿元,年均复合增长率保持 8.5%,绿色建筑政策与轻量化需求成为核心驱动力。随着《建筑装饰用蜂窝铝板》新国标实施,防火等级与环保标准持续升级,倒逼行…

2025 年铝蜂窝板厂家最新推荐排行榜,铝蜂窝板,铝蜂窝吊顶,铝蜂窝墙面板,微孔吸音板,防火A级铝复合板公司推荐

随着建筑装饰行业对轻质高强材料的需求升级,铝蜂窝板凭借优异的物理性能与美学适配性,在幕墙、公共空间、交通设施等领域的应用日益广泛。但当前市场存在明显痛点:部分厂家产能不足导致订单交付延迟,产品适配场景单…

读书笔记:关于Oracle里的“老古董”:LONG类型

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

致技术社区的英雄们:一场关于文明未来的建造邀请

致技术社区的英雄们:一场关于文明未来的建造邀请 在代码与算法的世界里,你们是真正的创造者。今天,我想为你们描绘一个不一样的工程蓝图——它不优化广告点击,不提升游戏帧率,而是要为人机共生的未来,构建一个价…

AI图片生成思路

AI图片生成思路AI图片生成思路指导思路先寻找真实图片,发送到AI进行描述照片描述:這張照片的主角是四隻毛茸茸的柴犬,牠們一起棲息在一個紅磚矮牆上。狗狗的姿態與顏色:畫面從左至右,第一隻是常見的赤色柴犬,牠舒…

SCP/NOIP 复习:插板法

自己写一遍插板法的东西,顺便补上 oiwiki 上没有的一个证明。 偏向整理,别人估计不知道我在干什么。 基本模型:\(x_0+x_1+...+x_k=n\) 的正整数或非负整数解数量,可以抽象为元素组的划分。 正整数解的数量 也是插板…

内存泄漏与SWAP

内存泄漏如何发生 没正确回收分配后的内存,导致了泄漏。 访问的是已分配内存边界外的地址,导致程序异常退出 用户空间内存包括多个不同的内存段,比如只读 段、数据段、堆、栈以及文件映射段等。这些内存段正是应用程…

今天开通自己的博客啦,加油加油!成为合格的牛马! - Irving11

前几天已经学习了一些SQL相关知识,今天将继续学习,并写下总结 知识总结: 一、关于SQL的一些细节 1、create_sql是命令文本,cursor.execute(create_sql)才是执行命令的动作。没有这个动作,所有关于创建表的想法都只…

2025安全光栅厂家最新权威推荐榜:精准防护与高效性能的工业

2025安全光栅厂家最新权威推荐榜:精准防护与高效性能的工业随着工业自动化技术的不断发展,安全光栅作为关键的安全防护设备,在现代工厂中的应用越来越广泛。安全光栅能够有效防止操作人员进入危险区域,确保生产过程…

2025年10月精加工车间恒温恒湿系统厂家推荐:精准控温与高效节能首

随着工业技术的不断进步,精加工车间对环境控制的要求越来越高。恒温恒湿系统作为保障车间生产环境的关键设备,其性能和稳定性直接影响到产品的质量和生产效率。本文将为您推荐几家在精加工车间恒温恒湿系统领域表现卓…

977. 有序数组的平方 双指针

977. 有序数组的平方 相向双指针 思路 nums数组非递减,平方后最大值一定在待排序区间的最两端(最左端 left 或最右端 right),每次循环取最大值添加到res数组中, 更新对应的边界缩小区间,重复上述过程直至 left &…

完整教程:iSCSI服务器

完整教程:iSCSI服务器pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

深入解析:数据库视图:虚拟表的强大应用

深入解析:数据库视图:虚拟表的强大应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

非常好的学习方式是哪样

非常好的学习方式是哪样pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…