int newnode(int lst,int id){
int cur=++tot;
memset(nxt[cur],0,sizeof(nxt[cur]));
sg.update(sg.rt[cur],1,m,id);
return cur;
}
上面是不对的,你是高贵的真广义,只有假广义这么做才是对的。
下面才是对的,因为 expand(或者 insert)返回的 lst 才是真正对应当前节点的编号,不是新建节点后的编号。
void insert(string s,int id){
int len=s.length();
s=" "+s;
int lst=0;
for(int i=1;i<=len;i++){
lst=extend(s[i]-'a',lst,id);
sg.update(sg.rt[lst],1,m,id);
}
}