NOI2023Day2T2

发布时间 2023-09-03 15:49:20作者: blueparrot

\(36pts\)

\(O(tqn^2)\)暴力即可

\(40pts\)

对于最朴素的暴力优化,从头到尾扫,如果已经当前位字符比出优先级,那么直接能判断了,没必要往后跑了,第15个性质B的也给跑过了,我没料到,不过数据强一点其实和20pts没区别

\(性质A(60pts)\)

没有想出来

\(性质B(72pts)\)

写这个性质只有12pts,但是对于思考正解有很大帮助

给定st和r,题目让我们求 \(s[st,st+l-1]\) 字典序小于 \(R(s[st+l,st+2l-1])\) 且 1<=l<=r 的个数,先把反串接在后面,用特殊符号连接。既然这个东东很像回文,那我们就把他转化成回文串,采用放缩法,于是上面的东东相当于是: \(s[st,n]<=s[1,st+2l-1]\) ,跟上面的东东没两样,然后就是st开始的后缀小于st+2l-1结尾的前缀,感觉是SA+ds状物(SAM维护不了rank)。按照这样子搞显然会出现重复,不过写B性质绰绰有余,正解感觉就是搞个容斥减掉贡献了

\(n=|S+char+revS|\)

那么 \(yn=|S| ,有n=2yn+1\)

所以需要求 pos属于 \([n+2-st-2r,n-st]\) 且满足 pos和st奇偶性相同,rank[st]<rank[p]的个数

就变成了经典模型二维数点,但是需要分奇偶去搞,分奇偶去搞的原因如下:

\(A=S[st,st+l-1],B=S[st+l,st+2l-1]\)

我们尝试将 \(l\) 增加一位,比较的两个子串变成了 \(A'=S[st,st+l],B'=S[st+l+1,st+2l+1]\)

我们发现 \(B'\) 的右端点较 \(B\) 的右端点增加了 \(2\)

可以发现,在固定 \(l\) 的前提下,\(B\) 的右端点奇偶性是固定的, 所以我们需要将询问按 \(l\) 的奇偶性分别建立树状数组.

正解

在B性质基础上,考虑容斥,非法情况就是 \(S[st,st+2l-1]\) 构成回文串,并且 \(rank[st]<rank[st+2l-1]\) ,那就要减掉1种情况

现在想怎么搞出回文串,显然是要找偶回文,因为你没有理由中间有个字符(但是我们可以假设回文中心是 \(i+\frac{1}{2}\) )然后对于所有以某个位置为回文中心的所有偶回文串,针对 \(s[i...]和revs[..j]\) 要么全产生贡献,要么全都不产生贡献,所以就不需要用PAM和Manacher了,然后我们求回文串是什么,显然转化成了SA的经典问题,求任意两个后缀的lcp,不过要注意两个串是同一个(不过本质上是一样的),然后对于每一个 \(i\),扫过去的时候就又是个二维数点了,二维数点调了大半天,代码能力还有欠缺,保持专注,多加练习。