const int N=2e4+10; int n,sa[N],rnk[N],height[N]; char s[N]; //sa数组表示字典序为i的后缀是谁,rnk数组表示某个后缀的排名 void buildSA(int m=128){ int cnt[N],rnk1[N],rnk2[N],tmpSA[N]; //cnt[i]用来记录rnk小于等于i的子串已经有多少个了,这样可以直接用cnt[rnk[i]]更新sa //n=strlen(s)+1; //s[n]=0; 存疑 fill(cnt,cnt+m,0); for(int i=0;i...