QOJ970 Best Subsequence
题意简述
给定序列 \(a_{1 \cdots n}\),有 \(q\) 次询问,每次给定 \(l, r, k\),你需要在 \(l \sim r\) 中找到一个长度为 \(k\) 的子序列 \(b_{1 \cdots k}\),求 \(\max\limits_{i=1}^k (b_i+b_{i \bmod k + 1})\) 的最小值。
题目解析
考虑二分答案 \(m\),将序列中 \(\le \frac{m}{2}\) 的位置看做 \(1\),\(> \frac{m}{2}\) 的看成 \(0\).
容易发现在选择的子序列中,不会存在两个相邻的位置使得它们都是 \(0\).
回到原数组,每个 \(1\) 位置肯定都可以选,而对于每对相邻的 \(1\),设它们的位置分别为 \(i, j\),有两种可能:
- 若存在 \(k \in [i+1, j-1]\) 使得 \(\max(a_i+a_k, a_j+a_k) \le m\),则可以选 \(i, k, j\);
- 否则只能选 \(i, j\)(由于 \(a_i, a_j \le \frac{m}{2}\),有 \(a_i + a_j \le m\))。
设 \(x = \max(a_i, a_j), y = \min\limits_{k=i+1}^{j-1} a_k\),可以注意到这对 \(1\) 中间的 \(0\) 可以选当且仅当 \(m \in [x + y, 2y)\).
此处上界为 \(2y\) 是因为 \(x < y\) 且 \(x + y \le m\). 实际上 \(m=2y\) 的时候这对 \((i, j)\) 就已经不存在了,因为 \(y\) 对应的位置的值会变成 \(1\).
考虑每个 \(1\) 与符合条件的 \(0\) 才会造成贡献。
对于 \(1\) 的部分,可以
望穿寂夜晨曦至,雄鹰展翅图九天。

浙公网安备 33010602011771号