这真有紫吗。
直接解有点困难,考虑转化。
我们可以求出每块木板被哪颗子弹击碎。问题可以转化成:
给定一个长度为 mmm 的数组 AAA,nnn 次查询,每次给出 l,rl,rl,r,查询满足 ∑i=1k[l≤Ak≤r]\sum_{i=1}^k [l\le A_k\le r]∑i=1k [l≤Ak ≤r] 的最小的 kkk。
注意到这个查询是可减的,即可以转化成 (∑i=1k[Ai≤r])−(∑i=1k[Ai<l])(\sum_{i=1}^k [A_i\le r])-(\sum_{i=1}^k [A_i\lt l])(∑i=1k [Ai ≤r])−(∑i=1k [Ai <l])。
我们可以开 2×1052\times 10^52×105 颗线段树,第 iii 颗线段树下标 jjj 记录 AjA_jAj 是否小于等于 iii。显然可以递推建主席树。查询直接第 rrr 颗树减第 l−1l-1l−1 颗树,线段树二分即可。
时间复杂度 O(nlogn)O(n\log n)O(nlogn)。但怎么耗时比隔壁双 log 解法还要高呢,先天大常数圣体发力了(((