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

【题解】CF1693D Decinc Dividing

建议先阅读 CF1144G 题解。

直接按照上述做法暴力判断可以做到 \(O(n^2)\) 求解,但是这显然过不去。

考虑换一个枚举顺序:从大到小枚举左端点 \(l\),然后从 \(l\) 位置开始往右扫 \(r\)。在向左移动左端点 \(l\) 的过程中,若对于某个扫描到的右端点位置 \(r\),其两个 dp 值均和上一次 \(l\) 对应的 dp 值相同,那么容易证明之后所有 dp 值都是相同的(根据 CF1144G 的题解可知 \(f_{i,0/1}\) 的值只依赖于 \(f_{i-1,0/1}\)),后面的 dp 值无需继续更新。

然后你写上这个优化之后惊奇的发现你通过了这道题,下面考虑严格的证明一下该算法正确性。

首先可以证明 \(f_{i,0}\)\(f_{i,1}\) 对于同一个数组一定是分别单调的,原因显然。

然后考虑对于一个位置 \(i\)\(f_{i,0/1}\) 的取值。

找到最大的位置 \(j\) 使得其满足 \(a_j>a_{j+1}\),那么 \(f_{i,0}\) 的取值必然只能从 \(a_j,a_{j+1},+\infin,-\infin\) 中取,后两种情况是无解和还没选到这个序列内(可能不存在这样的 \(j\)),而考虑到 \(a_j,a_{j+1}\) 两个元素必然不能被同时选到单调递减的序列里,所以必然有一个作为单调递增序列的结尾元素。

同理,找到最大的位置 \(j\) 使得其满足 \(a_j<a_{j+1}\)\(f_{i,1}\) 的取值也必然只能从 \(a_j,a_{j+1},+\infin,-\infin\) 中取,后两种情况是无解和还没选到这个序列内(可能不存在这样的 \(j\)),而考虑到 \(a_j,a_{j+1}\) 两个元素必然不能被同时选到单调递增的序列里,所以必然有一个作为单调递减序列的结尾元素。

因此一个位置的 dp 值最多有 \(8\) 个不同取值,也就是说最多会被改 \(O(1)\) 次取值,因此期望均摊枚举 \(O(1)\) 个右端点就可以找到和上一次 dp 值相同的位置,总时间复杂度也就被优化到了 \(O(n)\)

namespace Loyalty
{int f[N][2], a[N];inline void init() {}inline void main([[maybe_unused]] int _ca, [[maybe_unused]] int _atc){int n, res = 0;cin >> n;for_each(a + 1, a + n + 1, [&](auto &input) { cin >> input; });int pos = n;for (int i = n; i; --i){f[i][0] = inf, f[i][1] = -inf;for (int j = i + 1; j <= n; ++j){int new_f = -inf, new_g = inf;if (a[j] > a[j - 1])new_f = max(new_f, f[j - 1][0]);if (a[j] > f[j - 1][1])new_f = max(new_f, a[j - 1]);if (a[j] < a[j - 1])new_g = min(new_g, f[j - 1][1]);if (a[j] < f[j - 1][0])new_g = min(new_g, a[j - 1]);if (make_pair(new_f, new_g) == make_pair(f[j][0], f[j][1]))break;f[j][0] = new_f, f[j][1] = new_g;}while (f[pos][0] <= -inf / 2 && f[pos][1] >= inf / 2)--pos;res += pos - i + 1;}cout << res << '\n';}
}
http://www.jsqmd.com/news/338908/

相关文章:

  • 健康科技的新突破点:提示工程的重要贡献方向
  • 【计算机毕业设计案例】基于ssm的Web的摄影分享平台系统基于Web的摄影分享平台(程序+文档+讲解+定制)
  • 【课程设计/毕业设计】基于ssm的英语四六级学习系统英语四六级学习考试系统【附源码、数据库、万字文档】
  • SQL Server 2019入门学习教程,从入门到精通,初识 SQL Server 2019 —— 语法知识点与使用方法详解(1)
  • 基于Django的微信订阅号AI接入系统设计与实现
  • 【毕业设计】基于ssm的就业招聘查询系统(源码+文档+远程调试,全bao定制等)
  • 基于多模态AI技术的智能图像与音乐生成系统设计与实现
  • 大数据时代必看!5种高效数据脱敏技术全解析
  • 【金融项目实战】2_接口测试 _API文档分析
  • 基于Django的超市管理系统设计与实现
  • 学习记录260203
  • 【笔记】【市场中的资金数量是如何调整的】【各个银行的功能是什么】【金融市场包括什么】【市场包括什么】
  • Precor必确GLUTEBUILDER系列精准聚焦,解锁臀部训练新维度
  • 2026年沃尔玛人权审核新规
  • ARP欺骗:ARP 协议与欺骗本质,ARP 欺骗的攻击流程是什么?
  • C++ 40年:从系统基石到AI浪潮的坚守与革新 - 指南
  • LlamaFactory的docker-compose安装 - 教程
  • 在RAG增强检索中应该用什么构建上下文?
  • 26年寒假生活指导2.3
  • CSS中的 `dvh` 与 `vh`: 深入理解视口单位
  • 高阶组件(HOC)在Vue中的实现:全面解析与最佳实践
  • Thinkphp和Laravel框架的私人服装西服定制设计与实现沙箱支付
  • 【建议收藏】2026网络安全学习路线全攻略:从小白到黑客大神,这6个阶段就够了!
  • SSM计算机毕设之基于ssm的就业招聘查询系统基于SSM的人才招聘管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 若战神白起时代的秦昭襄王早逝,宣太后会成为秦国的“吕后”或“慈禧”吗?
  • Thinkphp和Laravel框架的蔚来新能源汽车对比推荐平台设计与实现
  • Nginx 实战实验:从基础配置到虚拟主机搭建 - 指南
  • 网络安全学习指南:SSRF漏洞原理与实战,建议收藏
  • Thinkphp和Laravel框架的生鲜海鲜商城交易系统设计与实现没论文
  • 《构建之法》第二章 个人技术和流程 读书笔记 - GENGAR