求助 SAM 题解复杂度

P3649 [APIO2014] 回文串

与回文串个数没啥关系啊,就是正常的 SAM 上匹配后缀啊,复杂度没看出来哪里有问题欸。
by 约瑟夫用脑玩 @ 2022-02-16 23:13:35


请具体指出你觉得复杂度有问题的部分,比如第一篇题解代码实现中的“a~b行”。 反正我看上去每一部分都没有问题。
by 约瑟夫用脑玩 @ 2022-02-16 23:14:51


@[约瑟夫用脑玩](/user/158948) 我不太清楚的是 SAM 上匹配后缀的复杂度 /kk
by Godzilla @ 2022-02-17 08:20:59


@[Godzilla](/user/147441) 不只是后缀匹配,SAM 上不管匹配什么,只要匹配 $T$ 个字符复杂度就是 $O(T)$ 的。 因为每次新匹配一个字符长度至多加 $1$,总长度最多 $T$,而跳 parent 链长度至少减 $1$,故至多跳 $T$ 次。 这复杂度的证明不比 SAM 本身的势能证明简单多了/lh
by 约瑟夫用脑玩 @ 2022-02-17 12:30:35


@[约瑟夫用脑玩](/user/158948) 不好意思,我没说清楚,应该是第 71-81 行不太理解,也就是每次匹配就从 maxpos 跳 fa 的过程,这里 now 并不会减小。 ``` if(st[now].maxpos<i+l){ if(i<=st[now].maxpos) ans=max(ans,(ll)(st[now].maxpos-i+1)*dp[now]); for(int p=st[now].link;p!=-1&&!vis[p];p=st[p].link){ vis[p]=true; if(i<=st[p].maxpos&&st[p].maxpos<=i+st[p].len-1) ans=max(ans,(ll)(st[p].maxpos-i+1)*dp[p]); } } ```
by Godzilla @ 2022-02-17 12:49:31


@[Godzilla](/user/147441) 是指的这里的 `p` 吗?这里有 `vis` 数组只会访问 $n$ 次啊。
by 约瑟夫用脑玩 @ 2022-02-17 15:02:39


@[约瑟夫用脑玩](/user/158948) 是我眼瞎了,谢谢大佬
by Godzilla @ 2022-02-17 15:05:43


|