CF702F T-Shirts

cf

luogu

暴力是挨个考虑,这里不妨整体考虑,先把所有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

转载于:https://www.cnblogs.com/smyjr/p/11509056.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值