一、题目
二、解法
可以按照 k k k分块,假设界限是 S S S,假设值域是 V V V
对于不足 S S S的情况,可以暴力处理,建出线段树的时间花费是 O ( n S ) O(nS) O(nS)的,查询是 O ( q log n ) O(q\log n) O(qlogn)的
对于超过 S S S的情况,我们用 k k k将值域划分成 V / k V/k V/k 段,对于每一段是可以直接找最大值的。问题变成了区间中值域区间最大值,用主席树即可,那么时间复杂度是 O ( n log n V / S ) O(n\log n V/S) O(nlognV/S)
所以当 S = V log n S=\sqrt {V\log n} S=Vlogn
咕咕咕