P8978 「DTOI-4」中位数

P8978 「DTOI-4」中位数

P8978 「DTOI-4」中位数 - 洛谷 (luogu.com.cn)

Solution

二分答案,\(\ge X\) 的赋为 \(1\)\(<X\) 的赋为 \(-1\),每次将一个和为正的区间推平成 \(1\)

Observation 1:\(I_1,I_2\) 合法且 \(I_1\subseteq I_2\),则 \(I_2\) 一定更优。

Observation 2: 选择的区间一定两两间是包含关系。

若相交,则一定包含,否则不优。

设最后两个不相交区间为 \(I_i,I_{i+1}\)。那么 $I_{i+1}\subseteq I_{i+1}\subseteq\cdots\subseteq I_m $。

一定存在一个 \(p\in[i+1,m]\)\(I_p\cap I_i=\varnothing,I_i\subseteq I_{p+1}\)

\(|I_i|>|I_p|\),那么取消 \(I_{i+1} \sim I_p\),换成一个 \(I_i\subseteq I'\subseteq I_{p+1}\)\(I'\)\(I'\) 一定至少推平了 \(|I_i|-1\)\(0\),而 \(I_{i+1}\sim I_p\) 最多只能推平 \(|I_p|-2\)\(0\),所以 \(I'\) 更优。

\(|I_i|\le |I_p|\),这种情况是对称的,也是不优的。

Obversation 3: 若存在操作序列,\(m\)\(O(\log n)\) 级别的。

每次拓展区间时,至少推平 \(|I_{i-1}|-1\)\(0\),区间长度变为 \(2l-1\)

\(f_{i,l}\) 为第 \(i\) 次操作,若以 \(l\) 为操作左端点,可覆盖到的最大 \(r\)

拿出右边的所有区间 \([j,f_{i-1,j}]\),对于一个 \(q\) 若存在一个 \([p,f_{i-1,p}]\) 满足 \(s_q-s_{l-1}+w(p,f_{i-1,p})>0\)\(q\) 合法。其中 \(w(l,r)=(r-l+1)-(s_r-s_{l-1})\)

直接做就是 \(O(n^2\log n)\) 了,总复杂度 \(O(n^2\log^2 n)\)

继续发掘性质,对于区间考虑,设 \(g_i\)\(s_j\ge i\) 的最大 \(j\),若 \(g(s_{l-1}-w(p,f_{i-1,p})+1)\ge f_{i-1,p}\) 那么 \(p\) 合法。这个区间的权值为 \(g(s_{l-1}-w(p,f_{i-1,p})+1)\),我们希望找到一个权值最大的 \(p\)

\(g(i)\) 单调不升,所以希望 \(w(p,f_{i-1,p})\) 尽量大。而对于一个区间,左边存在一个 \(w\) 比它大的这个肯定没用,所以保留下来的区间一定是从左到右 \(w\) 递增的。

而又发现,若 \(p<q\land s_{p-1} \le s_{q-1}\),那么操作 \(q\) 一定不如操作 \(p\)。所以只需要保留 \(s_{l-1}\) 是前缀最小值的 \(l\)\(s_{l-1}\) 从左向右递减。所以 \(l\) 向左推进时,这个区间在一个时刻不合法,之后也不合法了,直接扔掉。

维护一个单调队列即可,总复杂度 \(O(n\log^2 n)\)

posted @ 2025-11-26 10:08  XP3301_Pipi  阅读(0)  评论(0)    收藏  举报
Title