sam的线段树合并可直接这么写,和sa桶排求rk一个道理,只不过这个可以直接按照len合并。
for (R int i = 1; i <= len; i++)
ins(ss[i]), T.Modify(rt[i], 1, tot, i);
for (R int i = 1; i <= tot; i++) c[t[i].len]++;
for (R int i = 1; i <= tot; i++) c[i] += c[i - 1];
for (R int i = 1; i <= tot; i++) rk[c[t[i].len]--] = i;
for (R int i = tot; i > 1; i--) rt[t[rk[i]].fail] = T.Merge(rt[t[rk[i]].fail], rt[rk[i]]);
原文地址:https://www.cnblogs.com/cjc030205/p/11666945.html
时间: 2024-10-09 09:21:12