热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CF739CAlyonaandtowers解题报告

线段树绝世好题。题意:维护区间加,全局最长单峰序列。Solution:维护\(8\)个量。\(lval\):左端点的权值。\(rval\):右端点的权值。\(lmax\):以左端点

线段树绝世好题。


题意:

维护区间加,全局最长单峰序列。


Solution:

维护 \(8\) 个量。

\(lval\):左端点的权值。

\(rval\):右端点的权值。

\(lmax\):以左端点开始的最长的下降序列长度。

\(rmax\):以右端点结束的最长的上升序列长度。

\(lans\):以左端点开始的最长的单峰序列长度。

\(rans\):以右端点结束的最长的单峰序列长度。

\(ans\): 区间内最长的单峰序列长度。

\(tag\):区间加法懒标记。

考虑怎么用左右两个儿子更新父节点的信息。

\(lson\) 来表示左儿子,\(rson\) 来表示右儿子,\(rt\) 来表示父节点。


\(lval\)

显然父节点的 \(lval\) 是左儿子的 \(lval\)


\(rval\)

显然父节点的 \(rval\) 是右儿子的 \(rval\)


\(lmax\)

如果说左儿子的 \(lmax\) 等于左儿子的区间长度,说明了左区间是个下降区间,如果同时左儿子的 \(rval\) 大于了右儿子的 \(lval\) 说明了父节点的 \(lmax\) 能向右区间伸展,这个时候 \(rt.lmax = lson.lmax + rson.lmax\)

否则无法跨过右区间,直接继承左儿子的值:\(rt.lmax = lson.lmax\)


\(rmax\)

如果说右儿子的 \(rmax\) 等于右儿子的区间长度,说明了右区间是个上升区间,如果同时左儿子的 \(rval\) 小于了右儿子的 \(lval\) 说明了父节点的 \(rmax\) 能向左区间伸展,这个时候 \(rt.rmax = lson.rmax + rson.rmax\)

否则无法跨过左区间,直接继承右儿子的值: \(rt.rmax = rson.rmax\)


\(lans\)

如果说左儿子的 \(rmax\) 等于左儿子的区间长度,说明了左儿子是个上升区间。

这个时候分两种情况:



  • \(lson.rval 说明了还能通过右儿子的 \(lans\) 继续扩展:\(rt.lans = lson.rmax + rson.lans\)

-\(lson.rval > rson.lval\) 说明了只能通过右儿子的 \(lmax\) 继续扩展: \(rt.lans = lson.rmax + rson.lmax\)

如果说左儿子的 \(lans\) 等于区间长度,想用右儿子扩展的话,必须满足 \(lson.rval > rson.lval\),这个时候:\(rt.lans = lson.lans + rson.lmax\)

否则无法通过右区间来更新,直接继承左儿子的值:\(rt.lans = lson.lans\)


\(rans\)

如果说右儿子的 \(lmax\) 等于右儿子的区间长度,说明了右儿子是个下降区间。

这个时候分两种情况:



  • \(lson.rval > rson.lval\) 说明了还能通过左儿子的 \(rans\) 继续扩展:\(rt.rans = lson.rans + rson.lmax\)



  • \(lson.rval 说明了只能通过左儿子的 \(rmax\) 继续扩展: \(rt.rans = lson.rmax + rson.lmax\)



如果说右儿子的 \(lans\) 等于区间长度,想用左儿子扩展的话,必须满足 \(lson.rval ,这个时候:\(rt.rans = lson.rmax + rson.lans\)

否则无法通过右区间来更新,直接继承左儿子的值:\(rt.rans = rson.rans\)



推荐阅读
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 使用Dreamweaver创建用户注册表单的详细步骤
    本文将详细介绍如何使用Adobe Dreamweaver创建一个功能完整的用户注册表单。通过本教程,您将掌握从插入表单元素到设置属性的每一个步骤,帮助您快速上手并完成高质量的网页设计。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • 单片机与PLC:入门难易度及应用场景对比
    本文探讨了单片机和PLC的学习难度及各自的应用场景,帮助读者根据自身需求选择合适的学习路径。单片机是一种微控制器,而PLC(可编程逻辑控制器)则专为工业自动化设计。两者各有优劣,适合不同的应用领域。 ... [详细]
  • 本文将详细介绍如何在Linux操作系统中执行PHP脚本,包括环境配置、命令使用及验证方法。对于需要在Linux环境下开发或部署PHP应用的用户来说,这是一篇非常实用的文章。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
author-avatar
潘月飞--_758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有