现在要求一个点最远的一个位置使得它是原串的后缀,然后就用了二分hash(我二分的是位置),结果遇到了神秘问题。
错误的示范
int l=1,r=i,ans=2*n;
while(l<=r)
{
int mid=(l+r)>>1;
if(cheak(mid,i)==cheak(n-i+mid,n))ans=mid,r=mid-1;
else l=mid+1;
}
f[i]=min(query(1,1,n,max(1ll,ans-1),i),ans);
modify(1,1,n,i,i,f[i]);
正确的示范
int l=1,r=i,ans=2*n;
while(l<=r)
{
int mid=(l+r+1)>>1;
if(cheak(mid,i)==cheak(n-i+mid,n))ans=mid,r=mid-1;
else l=mid+1;
}
f[i]=min(query(1,1,n,max(1ll,ans-1),i),ans);
modify(1,1,n,i,i,f[i]);
求大佬解答,加一减一这种不是可以遍历完吗?