9.14~9.20 周总结

数据结构 Trick 之:KDT 求 k 近/远 点 - porse114514 - 博客园
数据结构 Trick 之:区间子区间计数 - porse114514 - 博客园
数据结构 Trick 之:分割问题的基于随机数的做法 - porse114514 - 博客园

历史最值线段树

在原来的基础上维护历史最值与 \(tag\) 的最值。

P4314 CPU 监控

环上的旋转与全局reverse 操作并行

无论怎样修改都不会改变顺序。

CF1907F Shift and Reverse

分组交互

当交互次数为 \(\frac{q}{p} \times n\) 时,可以考虑 \(q\) 个一组,每组 \(p\) 次解决。

CF2134E Power Boxes

最值 -> 绝对值

\(max(a, b) = \frac{1}{2}(a + b + |a - b|)\)
\(min(a, b) = \frac{1}{2}(a + b - |a - b|)\)

CF2140D A Cruel Segment's Thesis
CF1503C Travelling Salesman Problem

序列 -> 0/1

进行一系列无法维护的东西后剩下/查询一个点,可以将大于的设为 \(1\),小于的设为 \(0\),即可变得好做。

CF2140E2 Prime Gaming (Hard Version)

二选一 -> 调整法

类似于鸡兔同笼,当我们每一步可以选择一种操作时,可以先假设全选一种,再将一部分替换为第二种。

CF1661C Water the Trees - 洛谷

看起来做不了的题 -> 大胆猜答案上/下限

以下限为例:

  1. 猜一个下限。
  2. 证明答案一定能取到它,如果可以,那么就做完了;如果不可以,尝试提高下限,再回到第 2 步。

AT_arc136_c [ARC136C] Circular Addition - 洛谷

带调和级数的复杂度

当我们的算法的时间复杂度是 \(\sum_{i = 1}^{n} \frac{n}{i}\) 时,其实式子等于 \(n \times (\ln n + \gamma)\)(\(\gamma\) 是欧拉常数,大概是 \(0.5771\)) 是 \(O(n \log n)\) 且比正常的 log 跑得还快的。

植物部队 - 核桃OJ

大胆的势能分析

适用于这类题:要操作不小于 \(10^9\) 次却没有什么算法能快速求。

  1. 考虑是否所有的操作都有用或者是否有能够合并的操作
  2. 将没用的操作删去,能合并的操作全部合并。
  3. 对此时的操作数势能分析,如可做,则结束。

E - Cut in Half

一个结论

\(k\) 个岗位,每个岗位需要 \(b_i\) 个人,有 \(n\) 个人,每人可以同时胜任 \(a_i\) 个岗位,则:

能够让 \(k\) 个岗位都招满的充要条件是 \(\forall k' \in [1, k], \sum_{i = 1}^{k'}\min(k', a_i) \geqslant \sum_{i = 1}^{k'}b_i\)。其中,\(b_i\) 已经按从大到小排过序了。

G - Set list

一个区间合并

给定一个括号序列,左括号有权值,每次询问是一个区间,求区间内最大权值和匹配。

考虑分块,先预处理里面,查询时只需合并。

合并方法:显然有一个贪心就是区间内左括号权值从大到小匹配,所以左边的区间已经匹配的不用换。二分右边需要反悔几个即可。

当然猫树更快一点。

防御阵型 - 核桃OJ

posted @ 2025-09-16 20:44  porse114514  阅读(21)  评论(0)    收藏  举报