题面:http://www.lydsy.com/JudgeOnline/problem.php?id=2806
大神的题解:http://blog.csdn.net/acdreamers/article/details/10833181
不过维护单调队列的那一段好像错了?
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define M 2500010
#define N 5000010
using namespace std;
int mx[M],f[M],q[M],n,m,ans;
char str[M];
struct Suffix_Automan{
int root,cnt,last,ch[N][3],dep[N],fa[N];
inline int newnode(int deep){
dep[++cnt]=deep;
return cnt;
}
void init(){
last=root=cnt=1;
}
void ins(int x){
int p=newnode(dep[last]+1);
int u=last;
for (;u&&!ch[u][x];u=fa[u]) ch[u][x]=p;
if (!u) fa[p]=root;
else {
int q=ch[u][x];
if (dep[q]==dep[u]+1) fa[p]=q;
else{
int nq=newnode(dep[u]+1);
fa[nq]=fa[q];
fa[q]=fa[p]=nq;
memcpy(