如果你的双指针部分写法形如
while(k<=r&&!pre[k].inc(suf[i]))
{
add(ro,0,pre[k].n,1);
k++;
}
while(j<=r&&suf[i].inc(pre[j]))
{
add(ro,0,pre[j].n,-1);
j++;
}
那么如果出现 sufi=prek 的情况,j 就会移动到 k 后面。因此改成
while(k<=r&&!pre[k].inc(suf[i]))
{
add(ro,0,pre[k].n,1);
k++;
}
while(j<k&&suf[i].inc(pre[j]))
{
add(ro,0,pre[j].n,-1);
j++;
}
就行了。