为什么好几题的SAM题,都有进行类似的操作(代码如下),我理解不了这些操作的原理,求解答
for(int i=1;i<=cnt;i++) c[len[i]]++;
for(int i=1;i<=cnt;i++) c[i]+=c[i-1];
for(int i=1;i<=cnt;i++) num[c[len[i]]--]=i;
for(int i=cnt;i>0;i--){
int u=num[i];
size[fa[u]]+=size[u];
if(size[u]>1) Ans=max(Ans,1LL*size[u]*l[u]);
}