暴力是挨个考虑,这里不妨整体考虑,先把所有T恤按照价值从大到小为第一关键字,价格从小到大为第二关键字排序,然后依次考虑,可以发现这时候剩余钱数(>c_i)的会买,这会导致他们钱数(-c_i),答案(+1).因为这一段人是连续区间,所以考虑用平衡树维护,每次找到钱数(.=c_i)的点,打上减钱数和答案(+1)的标记,再和其他点合并成新平衡树
不过直接这样做显然是假的,如果很多人每次都买了T恤,那么复杂度会有(O(n^2logn)).所以进一步的可以发现如果钱数(ge 2c_i)的人,合并之后他们之间不会插入其他人.那么就先把钱数(ge 2*c_i)的人拎出来,打好标记,然后对钱数在([c_i,2c_i))之间的人修改完后全部暴力合并到前面钱数(<c_i)的人里,然后把之前钱数(ge 2*c_i)的人直接接到后面.注意到钱数在([c_i,2c_i))之间的人每次钱数都会减少至少一半,所以一个人最多被暴力插入(log_{b_j})次,复杂度就是(O(nlognlog_{max b_j}))
然后splay被卡爆了,所以先放个被卡代码,学了Treap再来补qwq