建立后缀自动机,对于同一个节点,出现次数是相同的(right的大小),同时满足单调性(长度越长出现次数越少),所以只需要考虑最长的串即可。

PS:似乎也并不需要求依次后缀的max,不知道为什么……

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 250005
4 int V,last,k,a[N],id[N<<1],sz[N<<1],ans[N],len[N<<1],sum[N<<1],fa[N<<1],ch[N<<1][31];
5 char s[N];
6 void add(int c){
7 int p=last,np=last=++V;
8 sz[V]=1;
9 len[np]=len[p]+1;
10 for(;(p)&&(!ch[p][c]);p=fa[p])ch[p][c]=V;
11 if (!p)fa[np]=1;
12 else{
13 int q=ch[p][c];
14 if (len[q]==len[p]+1)fa[np]=q;
15 else{
16 int nq=++V;
17 len[nq]=len[p]+1;
18 memcpy(ch[nq],ch[q],sizeof(ch[q]));
19 fa[nq]=fa[q];
20 fa[q]=fa[np]=nq;
21 for(;(p)&&(ch[p][c]==q);p=fa[p])ch[p][c]=nq;
22 }
23 }
24 }
25 int main(){
26 scanf("%s",s);
27 V=last=1;
28 for(int i=0;s[i];i++)add(s[i]-'a');
29 for(int i=1;i<=V;i++)a[len[i]]++;
30 for(int i=0;s[i];i++)a[i+1]+=a[i];
31 for(int i=1;i<=V;i++)id[a[len[i]]--]=i;
32 for(int i=V;i;i--){
33 ans[len[id[i]]]=max(ans[len[id[i]]],sz[id[i]]);
34 sz[fa[id[i]]]+=sz[id[i]];
35 }
36 for(int i=1;s[i-1];i++)printf("%d\n",ans[i]);
37 }

最新文章

  1. Web存储-Web Storage
  2. CSS与JavaScript的一些问题汇总
  3. Generics and Collection (1)
  4. C# Enum 简易权限设计 使用FlagsAttribute属性
  5. Maven+Spring+Mybatis+Security+Mysql简短的框架
  6. Python学习_数据处理split方法
  7. Android 的开源电话/通讯/IM聊天项目全集
  8. gdb学习(一个)[再版]
  9. 转:iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
  10. jquery实现ajax提交表单的方法总结
  11. Log4j配置和解释
  12. Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
  13. C#保留小数点后几位
  14. 小强学渲染之Unity Shader编程HelloWorld
  15. JavaEE 之 WebService
  16. 如何查看已经安装的nginx、apache、mysql和php的编译参数
  17. 如何生成Junit报告
  18. C++中绝对值的运算
  19. Oracle数据库错误大全
  20. 本地搭建Wooyun漏洞库环境

热门文章

  1. 微信小程序访问豆瓣api报403错误解决方法
  2. SpringBoot入门01-环境部署
  3. nginx源码编译安装(详解)
  4. gitk
  5. 初学Python “登录”案例 更新!!
  6. HttpRunner3.X - 实现参数化驱动
  7. 初学python写个自娱自乐的小游戏
  8. 使用registry搭建docker私服仓库
  9. elf文件--基于《ctf竞赛权威指南pwn篇》
  10. 2021.9.20考试总结[NOIP模拟57]