再次丢人
这样跳的话会被扫帚卡掉 /kk ,只有 70 pts 。
不明白这样为什么是假的啊 /dk,这样不是 O(nlogn) 嘛
if(len>1) {
int las=0;
while(true) {
if(seq[now+1].ch==seq[len].ch) {
int tmp=min(seq[now+1].tot,seq[len].tot);
if(tmp>las) pls(res,calc(sum[now]+las+1,sum[now]+tmp)),las=tmp;
}
if(!now||seq[now+1]==seq[len]) break;
if((sum[nxt[now]]<<1)>=sum[now]) now=nxt[now%(sum[now]-sum[nxt[now]])];
else now=nxt[now];
}
if(seq[now+1]==seq[len]) nxt[len]=++now;
else if(!now&&seq[now+1].ch==seq[len].ch&&seq[now+1].tot<seq[len].tot)
pls(res,1ll*seq[now+1].tot*(seq[len].tot-las)%mod),nxt[len]=now=1;
} else pls(res,calc(1,seq[1].tot-1));