热门标签 | 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\)



推荐阅读
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细解析了MySQL中常见的几种错误,并提供了具体的解决方法,帮助开发者快速定位和解决问题。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • CSS 实现 Inline-Block 元素水平居中
    本文介绍了如何使用 CSS 将 inline-block 类型的元素进行水平居中对齐的方法,适用于多种布局需求。 ... [详细]
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社区 版权所有