CF547E 二分+sa+主席树

这提供一个sa+主席树的做法,这个用做法就你顺势可以在敲掉基本一样的洛谷P4084
题意询问的是k串在[L,R]的串里面出现了多少次,不同位置算多次。
对于一个串在SA里的位置以及和他最像的位置必然是连续的(字典序的原因),然后对于每一个串就都可以二分出一个区间,这个区间内的串都有和当前串相同的前缀。
那么我们知道这个区间后,怎么知道询问要求的区间有多少个是落在能够使用的区间呢?
这就是可以利用主席树。我们让rk为权值去建立主席树,然后按字符串长度的顺序去插入,然后询问的时候我们就可以直接询问主席树上某个区间里面出现了多少个rk在二分出来的区间的数量,(二分出来的区间也就是一个rk的区间范围)
RE警告之一:由于字符串可以有很多个,如果每一组都是用新的字符去连接的话,字符会不够用,这就会RE,我们需要用int去存储字符串,这样就不会有RE的问题了。
RE警告之二:二分的时候要注意有没有写错,如果你懒得在敲一次想cv你之前写过的代码,不要cvP2336 那道题的二分你写错了也能A,你debug可能要好久。
RE警告之三:主席树空间要开足,我一开始主席树开小了出RE但是没红感叹号提醒又debug好久
代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值