有 $n$ 种T恤,每种有价格 $c_i$和品质 $q_i$ 。
有 $m$ 个人要买 $T$ 恤,第 $i$ 个人有$v_i$元,每人每次都会买一件能买得起的 $q_i$最大的$T$恤。一个人只能买一种T恤一件,所有人之间都是独立的。
问最后每个人买了多少件 $T$ 恤?如果有多个 $q_i$ 最大的T恤,会从价格低的开始买。
考虑朴素暴力枚举人$O(nm)$无法优化。
考虑枚举衣服,先按品质排序,然后再价格为第二关键字。朴素考虑将所有$v_i\geq c_i$都$+1$,并且$v_i=v_i-c$。
这种区间修改就想到了$FHQ$,考虑$v_i>2c$的只要打上标记就好,相对位置不会变,即在平衡树上位置不会变,但是考虑$c\leq v_i\leq 2c$,要改变,这里可以暴力。
- $c\leq v_i\leq 2c$,$nv_i\leq v_i/2$。对于一个价格来说最多暴力改变$\log n$
最后复杂度就可$O(n\log^2n)$
代码
1 |
|