cf F. Kazaee(离散化随机hashing+树状数组)

来点题外话:我创建这个专栏的时候不会想到我会有一段时间每天都在打代码,cf出勤率从来没这么高过……

由于最近写题解的部分转化成了给学弟们回答问题,特别是在cf后,因此没怎么更新,所以小更一波~

​​​​​ Problem - F - Codeforces

群里看到的,觉得这题非常有趣,于是来点更新

题目大意:给一个初始数组,q个操作

1 i x:ai换成x

2 l r k:查询l到r内是否存在每种数的个数都是k的倍数

题解:如果符合条件的话,则区间l-r的和是k的倍数,当数被离散化后此结论同样成立。

如果区间和为k的倍数的时候,有可能是对的也可能是错的

但是如果不为k的话,此时一定是错误的

我们想办法排除掉本来是错误但是被我们判定为正确的情况的情况

如果k为2的话,如果本来答案是错误的,此时有奇数和偶数两种情况,概率相同,偶数会被判定为对的,因此错误概率为1/2

k大于2之后错误概率减少

我们重复哈希t次,直到错误概率约等于0,概率约为1/2^t,t取30(我不知道为啥,但是这个概率看起来脸不黑应该是能过的)

单纯的单点修改+区间查询=树状数组

好啦结束

代码还没写,我研究下随机化hashing

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值