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