Examples

2022-12-13 #11 万籁悉数寂静后 仅剩落空的祈求

——COP《Hello & Bye , Days》

呜呜呜,昨天打 CF 好拉跨。

看到了 NOIP 榜,还是挺难受的,翻盘看上去也不是很容易,最近还是少颓一点吧。

不过比较令人欣慰的一点是最近的状态渐渐步入正轨了,还是挺开心的。

可惜过几天就要回去上文化了。

59 P7220 [JOISC2020] 掃除

做到下面那道题的时候突然想起来忘记记录这题了。

一个结论是,所有被扫过一次的灰尘,两两之间位置关系都是“左上-右下”,而且相对顺序不会改变。

如果只有向右扫操作,它就是一个后缀取 max。加上向上扫操作,它事实上会让后面某些向右扫操作影响的灰尘范围变小。我们可以用线段树维护每个向右扫影响哪段后缀,向上扫影响哪段前缀。

于是我们需要找到灰尘第一次被扫到的位置,它只限制操作的 \(l\) 在某个区间,这很容易处理。

由于上面的算法不太能支持插入,我们对插入的过程线段树分治就好了,复杂度 \(O(q\log^2 q)\)

好像还有一种比较暴力的做法,我们对直角三角形建出一棵线段树一样的结构,(大概每次从中点劈开,划分成一个大正方形和两个小直角三角形,递归处理三角形)它与动态开点线段树性质差不多,我们每个结点维护一个数据结构就好了。

60 uoj#712. 【北大集训2021】简单数据结构

和上面那题的思想类似。

我们记录进行了多少次操作 \(2\),那么操作 \(1\) 就是全局对一条直线 chkmin。

我们发现,进行了有效的 chkmin 操作的点,操作 \(1\) 的影响范围会是一段后缀,这显然可以线段树二分。

我们只需找到每个数第一次被 chkmin 的时间,这个可以整体二分+李超树,复杂度 \(O(n\log^2 n)\)

61 P7582 「RdOI R2」风雨(rain)

这题好像做法挺多的,随便想了个操作分块:

一个操作块只有根号个操作,它会将下标划分成根号段。将询问差分后挂前缀上扫描线,用 ACAM 配合 \(O(1)-O(\sqrt n)\) 分块可以得到不考虑这个操作块对应的答案。

好像做法假了😅。草,仔细想想发现没假。

用珂朵莉树将区间推平变为区间加,于是只需考虑区间加的影响。

对于每组询问,枚举它所在时刻修改过的根号段下标区间,那么就是计算这个串在一段区间中包含子串个数之和。(要求 \(O(1)\)

由于此时只要处理静态问题,差分后挂前缀扫描线,ACAM 配合 \(O(\sqrt n)-O(1)\) 分块即可。

离线逐块处理空间可以线性。


😅

咋办,做不动题。

image


62 ARC135E Sequence of Multiples

显然可以得知一个正确的贪心,但是貌似不是很有用。

不会这种神秘题,没办法。

列出递推式,并令 \(B_i=\frac{A_i}i\)

\[A_i=i(\lfloor\frac {A_{i-1}}i\rfloor+1)\\B_{i+1}=\lfloor\frac{iB_i}{i+1}\rfloor+1=B_i+1-\lceil\frac {B_i}{i+1}\rceil \]

粗略地估计一下 \(B\) 值:

\[B_i\leqslant \frac{X+\frac{i(i+1)}{2}}{i}=\frac Xi+\frac{i+1}2 \]

\(B\) 差分,得到的序列只有 \(O(X^{\frac13})\) 种取值,类似整除分块的分析:

  • \(i\leqslant X^{\frac13}\):显然。
  • \(i>X^{\frac13}\):$$B_i-B_{i+1}=\lceil\frac{B_i}{i+1}\rceil-1\leqslant\frac{\frac Xi+\frac{i+1}2}{i+1}$$,明显是 \(O(X^{\frac13})\) 级别的。

由于 \(B_i\) 不增,\(\lceil\frac{B_i}{i+1}\rceil-1\) 也不会增,我们可以尝试暴力遍历每一段等差数列。

若段首为 \(l\),公差 \(d=\lceil\frac{B_l}{l+1}\rceil-1\),我们需要寻找 \(\lceil\frac{B_l-(r-l)d}{r+1}\rceil-1=d\) 最大的 \(r\)

\[d=\lceil\frac{B_l-(r-l)d}{r+1}\rceil-1=\lceil\frac{B_l+(l+1)d}{r+1}\rceil-d-1\\ 2d+1=\lceil\frac{B_l+(l+1)d}{r+1}\rceil=\lfloor\frac{B_l+(l+1)d-1}{r+1}\rfloor+1\\ r+1=\lfloor\frac{B_l+(l+1)d-1}{2d}\rfloor\]

复杂度 \(O(TX^{\frac13})\)

63 CF1530H Turing's Award

*3400 紫题!

倒着考虑这个过程,那么就不是每次都覆盖而是只考虑第一次。

通过调整法可以保证,出现的数一定可以被选入 LIS。

LIS 长度期望为根号,我们不妨把 LIS 两维交换,dp 记录下步数以及目前 LIS 长度,在头还是在尾,dp 值就是另一端的最值。

树状数组维护,复杂度 \(O(n\sqrt n\log n)\)

64 CF1019E Raining season / P5114 八月脸

之前被剧透过做法。。。

边分治一下,两边分别做个凸包,闵可夫斯基和合并,最后把闵可夫斯基和出的所有向量放一起再做一遍凸包。

复杂度 \(O(n\log^2 n)\)

65 ARC137E Bakery

一眼流,关键是怎么流。

我们可以建出一个模型:

\[(i,i+1,a_i,-d),(i,i+1,m-a_i,0),(R_i+1,L_i,1,c_i) \]

此图最小循环费用流即我们所求。

最小循环费用流转最小源汇费用流是经典的算法:

对于所有负权边,默认流满,仅建出其反边,而正权边不管。此时有可能不满足流量平衡,我们加入一对源、汇来调整流量,最后跑个最小费用最大流即可。

今天才会原始对偶啊,真是菜。

66 CFgym102979K Knowledge Is...

一个简单的转化是将可以同时选的区间连边,求最大匹配。

可以使用反悔贪心解决,具体地,我们将区间按照左端点排序,用两个堆分别维护可匹配的位置和可反悔的位置。

然后从左往右扫每个区间,能匹配就匹配,否则看右端点是否比反悔堆中最小的右端点大,如果是就把反悔堆堆顶与当前区间交换。

复杂度 \(O(n\log n)\)

posted @ 2022-12-13 11:25  xiaoziyao  阅读(184)  评论(1)    收藏  举报