CF1913
先用桶记录各个位数量。
对于每次询问,从低位到高位扫,先用掉一个当前位的,然后把当前位的全部转化成 \(cnt/2\) 个更高位的。
有一个思路:其实删区间可以视作删相邻两个数。(然鹅这题不是按这个思路做的)
考虑整个序列最小值,它一定不会被删。
这个最小值把序列剖成两半。递归进入左右分别计算方案数。
有个问题:递归进入后,更短的序列的最小值也可能被边界外的更小值删掉。
但是我们发现,新的最小值要被删,一定是连着某半边全部删了。
和士兵占领类似。按行列建图。
每一行建一个点,每一列建一个点,行列之间连边容量 \([0,1]\),费用为:若对应格子原本是 \(1\),费用为 \(0\);否则费用为 \(1\)。
\(S\) 向行连容量 \([a_i,a_i]\) 费用 \(0\) 的边,列向 \(T\) 连容量 \([b_i,b_i]\) 费用 \(0\) 的边。
跑有源汇上下界最小费用最大流。
这里回顾一下:上下界网络流是出的多了 \(x\),就向新超汇点连容量为 \(x\) 的边!所有额外边费用都是 \(0\),不要忘了原本的 \(T\) 向 \(S\) 连 \(+\infty\) 边!