[主席树] [二分] [中位数] P2839 [国家集训队] middle

posted on 2024-04-13 08:30:42 | under | source

lsy 给的好题。

先考虑怎么求区间 \([l,r]\) 的中位数。

套路:对于中位数问题,考虑二分答案 \(k\),将 \(\ge k\) 标为 \(1\),将 \(<k\) 标为 \(-1\)。和具有单调性,当和刚好 \(> 0\)\(k\) 就是中位数。

由于此题是向上取整,所以合法情况是和 \(\ge0\)

因此需要快速对每个 \(k\) 求出区间内 \(\ge k\) 的数量、\(<k\) 的数量。由于 \(k\) 增长时 \(1\) 标记不减,所以可以主席树预处理出每个 \(k\) 的情况。

至此,可以 \(\log (n)^2\) 处理一个区间的询问。

回到本题,可以发现它要求的区间由 \([l,b],(b,c),[c,r]\) 构成,中间一段固定,只要让两边都取到最大就好了。

综上,我们维护一棵主席树,支持查询区间和、固定端点区间最大值即可。

代码待会补。

posted @ 2026-01-13 11:24  Zwi  阅读(0)  评论(0)    收藏  举报