当前位置: 首页 > news >正文

CF2101D

给定一个长度为 \(n\) 的排列 \(a\),问其有多少个子串 \(b\),使得 \(LIS(b) + LDS(b) = |b| + 1\)

\(n \le 2 \times 10^5\)

考虑一下题目给的条件在说啥,其实就是每个元素都在 \(LIS/LDS\) 中,只有一个相交的地方(因为时排列),类似一个 "X" 形。

这个相交的点看起来就是这个构图的关键:就是这个交点 \(x\),找到最小的 \(l\) 和最大的 \(r\) 满足 \(l \le x \le r\) 且满足条件即可,然后贡献是 \((x - l + 1)(r - x + 1)\)

因为 \(l, r\) 是独立的,假设现在求 \(l\)

对于 \(< x/> x\) 的元素分开考虑,对于\(< x\) 的元素,其实就是找到一个最大的 \(y\) 满足 \(a_y < a_{y - 1} < a_x\)(其实应该是找到一个 \(z\),满足 \(a_z < a_x\)\(\min \{ a_{z + 1} a_{z + 2}, \dots a_{i - 1} \} < a_z\),化简一下就是前面那个)。

用个单调栈维护 \(a_{y} < a_{y - 1}\) 的位置,搞个前缀最大值即可。(推一推如果 \(l\) 对于 \(i\) 不满足,对于 \(i + 1\) 也是不满足的,根据 \(a_i, a_i + 1\) 套路一下即可。)


最后发现可能一个子串可能被多次算到,将 \(x\) 对应到一个矩形里,暴力算矩形并即可。但是实际有更简单的方法,因为我们得到的矩形横竖轴的 \(l, r\) 都是单调不减的,只需要和前一个矩形取并即可。

时间复杂度:\(O(n)\)

转化题目条件,抓住关键点 \(x\),再算答案,思路还是挺顺畅的,组合起来有点难。

http://www.zskr.cn/news/47930.html

相关文章:

  • 01321:棋盘问题
  • C 变量的作用域与生存周期
  • #题解#洛谷P1496#离散化#
  • 20251112 正睿
  • 如何根据色带计算电阻阻值
  • 《云操作系统(OpenStack)第二版》学习笔记汇总版-从0开始完成在线安装并为离线安装准备软件包
  • Day36(6)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01
  • 2025 11 12
  • Total Recall: 如何在Windows下开发输入法
  • 大数据量场景下的编辑 / 选择 / 详情优化
  • RabbitMQ相关
  • 使用NVIDIA TAO 6和DeepStream 8构建实时视觉检测管道 - 实践
  • ChatBI 重构工业数据交互:TDengine IDMP 让数据对话更智能
  • 云服务模式进化论:企业云战略的致命误区,从IaaS到FaaS的死亡之旅!
  • Python 实现对遥感影像根据DN值上色
  • 【免费】MySQL自动化运维工具,一键生成WORD和EXCEL
  • 实用指南:轻量化 + 绿色部署的日志监控系统log-monitor设计思路(一)
  • 随机链表的复制-leetcode
  • useActionState 阻止表单重置
  • 部署MQTT Broker - Mosquitto - -YADA
  • 7年java开发的一些感悟
  • 11.12 NOIP模拟6/多校1 改题记录
  • FFmpeg for Android 图传Web
  • 语法记录
  • Win7 隐藏文件夹盘符
  • DotNetGuide 突破了 9.5K + Star,一份全面的C#/.NET/.NET Core学习、工作、面试指南知识库!
  • 在ec2上部署qwen3-VL-2B模型
  • 【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
  • 软件工程学习日志2025.11.12
  • NLTK库用法示例:Python自然语言处理入门到实践 - 实践