[spojSUBLEX]Lexicographical Substring Search
建立后缀自动机,对于同一个节点,出现次数是相同的(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 }
[spojSUBLEX]Lexicographical Substring Search的更多相关文章
- spoj 7258 Lexicographical Substring Search (后缀自动机)
spoj 7258 Lexicographical Substring Search (后缀自动机) 题意:给出一个字符串,长度为90000.询问q次,每次回答一个k,求字典序第k小的子串. 解题思路 ...
- SPOJ SUBLEX 7258. Lexicographical Substring Search
看起来像是普通的SAM+dfs...但SPOJ太慢了......倒腾了一个晚上不是WA 就是RE ..... 最后换SA写了...... Lexicographical Substring Searc ...
- SPOJ SUBLEX - Lexicographical Substring Search 后缀自动机 / 后缀数组
SUBLEX - Lexicographical Substring Search Little Daniel loves to play with strings! He always finds ...
- [SPOJ7258]Lexicographical Substring Search
[SPOJ7258]Lexicographical Substring Search 试题描述 Little Daniel loves to play with strings! He always ...
- Lexicographical Substring Search SPOJ - SUBLEX (后缀数组)
Lexicographical Substrings Search \[ Time Limit: 149 ms \quad Memory Limit: 1572864 kB \] 题意 给出一个字符串 ...
- Lexicographical Substring Search SPOJ - SUBLEX (后缀自动机)
Lexicographical Substrings Search \[ Time Limit: 149 ms \quad Memory Limit: 1572864 kB \] 题意 给出一个字符串 ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
- 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)
http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...
- SPOJ Lexicographical Substring Search 后缀自动机
给你一个字符串,然后询问它第k小的factor,坑的地方在于spoj实在是太慢了,要加各种常数优化,字符集如果不压缩一下必t.. #pragma warning(disable:4996) #incl ...
随机推荐
- C语言日记① 初识C
概念 c语言是一种计算机语言 也就是人与计算机打交道的语言 在早期,因为计算机使用的二进制 所以早期写代码都是科学家来写的使用对应的功能二进制代码 需要用到手册,所以开发不方便 在后来,人们发明了汇编 ...
- Go语言核心36讲(Go语言基础知识一)--学习笔记
01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...
- Python&Selenium 数据驱动测试【unittest+ddt+xml】
一.摘要 本博文将介绍Python和Selenium做自动化测试时,基于unittest框架,借助ddt模块,使用xml文件作为测试输入. 二.xml文件 保存路径:D:\\Programs\\Pyt ...
- 某个buuctf的题(easy_tornado)
题目:http://88099f53-12b6-470a-9993-b73e4155940e.node3.buuoj.cn/ 1首先看三个文件的内容 2简单分析 如果出题人没整一些花里胡哨的,那么fl ...
- Install WSL
Install WSL Prerequisites You must be running Windows 10 version 2004 and higher (Build 19041 and hi ...
- CQL和SQL的CRUD操作比较
数据进行CRUD操作时,CQL语句和SQL语句的异同之处. 1.建表 2.CRUD语句比较 3.总结 1.建表 在此之前先分别创建两张表,插入数据,用来测试然后进行比较 在SQL数据库里面创建表 在C ...
- MySQL:怒刷牛客网“sql实战”
MySQL:怒刷牛客网"sql实战" 在对MySQL有一定了解后,抽空刷了一下 牛客网上的 数据库SQL 实战,在此做一点小小的记录 SQL1 查找最晚入职员工的所有信息 sele ...
- [对对子队]Beta阶段项目展示博客
Beta阶段项目展示博客 1 团队成员的简介和个人博客地址 成员 头像 岗位 博客 个人介绍 黄贤昊 PM 17373253 喜欢玩游戏和做游戏,项目经验基本都和游戏相关,擅长摸鱼,偶尔敬业. 吴桐雨 ...
- [no code][scrum meeting] Beta 6
$( "#cnblogs_post_body" ).catalog() 例会时间:5月19日11:30,主持者:黎正宇 下次例会时间:5月20日11:30,主持者:彭毛小民 一.工 ...
- PWM通过RC低通滤波器模拟DAC
当我们电路需要DAC而单片机并没有DAC外设时,则可采用PWM通过RC低通滤波器来模拟实现DAC功能. RC低通滤波器 当采用低通滤波器模拟DAC时,PWM频率应远大于RC低通滤波电路的截止频率fc= ...