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\) 的部分,可以

posted @ 2025-02-19 10:51  心灵震荡  阅读(73)  评论(0)    收藏  举报