Luogu P5329 [SNOI2019]字符串
作者:互联网
Link
比较\(s_i',s_j'\)只需要知道\(lcp(\min(i,j),\min(i,j)+1)\)。
所以我们可以\(O(n)\)预处理所有的结果然后sort/基数排序。
#include<cstdio>
const int N=1000007;
int las[N],pos[N],len[N];char s[N];
int main()
{
int n,L,R,c=0;
scanf("%d%s",&n,s+1);
for(int l=1,r=1;l<=n;l=r)
{
while(r<=n&&s[l]==s[r]) ++r;
++c,len[c]=r-l,s[c]=s[l],pos[c]=l-1;
}
L=R=c;
for(int i=c-1;~i;--i) s[i]>s[i+1]? (las[i]=L,L=i):(las[R]=i,R=i);
for(int p=L;p;p=las[p]) for(int i=1;i<=len[p];++i) printf("%d ",pos[p]+i);
return 0;
}
标签:min,int,Luogu,d%,pos,P5329,char,SNOI2019,las 来源: https://www.cnblogs.com/cjoierShiina-Mashiro/p/12220614.html