本质不同子串数量等于所有点的len-parent树上父亲的len的和。可以直接维护。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,fail[N],len[N],cnt=1,last=1;
ll ans;
map<int,int> son[N];
void relink(int x,int y)
{
ans+=len[fail[x]];
fail[x]=y;
ans-=len[fail[x]];
}
void ins(int c)
{
int x=++cnt,p=last;last=x;ans+=len[x]=len[p]+1;
while (son[p].find(c)==son[p].end()) son[p][c]=x,p=fail[p];
if (!p) relink(x,1);
else
{
int q=son[p][c];
if (len[p]+1==len[q]) relink(x,q);
else
{
int y=++cnt;
ans+=len[y]=len[p]+1;
son[y]=son[q];
relink(y,fail[q]);
relink(q,y);
relink(x,y);
while (son[p][c]==q) son[p][c]=y,p=fail[p];
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("qwq.in","r",stdin);
freopen("qwq.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();
for (int i=1;i<=n;i++)
{
ins(read());
printf(LL,ans);
}
return 0;
}

  

最新文章

  1. 关于Array的map方法中回调函数参数的问题
  2. Android中数据的传递以及对象序列化
  3. freeCAD预选项编辑器
  4. zk 获取session,request,servletContext,response
  5. html标签marquee实现走马灯效果(文字浮动)
  6. 将Mat类型转换成QImage类型
  7. fedora 23中配置tftp-server
  8. Qt 之容器内的控件全屏
  9. IE能够打开网页 可是chrome和火狐打不开网页解决的方法
  10. scala中java并发编程
  11. eclipse搭建elastic-job
  12. spark streaming集成flume
  13. 理解SQL的左连接与右连接
  14. 2012年蓝桥杯省赛A组c++第1题(xy迭代增殖)
  15. 1: process
  16. Jboss7.1 local EJB lookup problem
  17. Delphi 中DataSnap技术网摘
  18. 利用apt-get 进行jdk安装
  19. 从零开始——Java异常处理机制
  20. 核密度估计 Kernel Density Estimation (KDE) MATLAB

热门文章

  1. django post 403
  2. win10 Ubuntu16 双系统
  3. cat file | while read line的问题
  4. redis json 降低性能 使用 hash
  5. DevOps时代的软件过程改进探讨 杨振涛 云加社区 今天 作者:杨振涛,腾讯云TVP 本文从Jenkins,DevOps,云原生等视角探讨了软件过程改进在各个时代的挑战和价值,重新审视了SPI在软件开发和交付的效率和质量提升方面的意义
  6. angular 中*ngIf 和*ngSwitch判断语句
  7. MeasureSpec常用方法
  8. 自定义控件之Region区域
  9. Spring为什么@Autowired注入的是接口
  10. 使用java自带线程池