BZOJ4516: [Sdoi2016]生成魔咒 后缀自动机

时间:2022-09-07 21:55:16
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
#define N 200005
#define ll long long
using namespace std;
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int fa[N],mx[N];
int rt,lst,tot;
map<int,int> son[N];
int n;
ll ans=0;
void ins(int x){
int p=lst,np=++tot;
mx[np]=mx[p]+1;
while(p&&!son[p][x]){
son[p][x]=np;p=fa[p];
}
if(!p)fa[np]=rt;
else{
int q=son[p][x];
if(mx[q]==mx[p]+1)fa[np]=q;
else{
int nq=++tot;
mx[nq]=mx[p]+1;
son[nq]=son[q];
fa[nq]=fa[q];
fa[np]=fa[q]=nq;
while(son[p][x]==q&&p){
son[p][x]=nq;p=fa[p];
}
}
}
lst=np;
ans+=mx[np]-mx[fa[np]];
printf("%lld\n",ans);
}
int main(){
n=read();
rt=tot=lst=1;
for(int i=1;i<=n;i++){
int x=read();
ins(x);
}
return 0;
}

4516: [Sdoi2016]生成魔咒

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 459  Solved: 282
[Submit][Status][Discuss]

Description

魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。例如可以将魔咒字符 1、2 拼凑起来形成一个魔咒串 [1,2]。
一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒。
例如 S=[1,2,1] 时,它的生成魔咒有 [1]、[2]、[1,2]、[2,1]、[1,2,1] 五种。S=[1,1,1] 时,它的生成魔咒有 [1]、
[1,1]、[1,1,1] 三种。最初 S 为空串。共进行 n 次操作,每次操作是在 S 的结尾加入一个魔咒字符。每次操作后都
需要求出,当前的魔咒串 S 共有多少种生成魔咒。
 

Input

第一行一个整数 n。
第二行 n 个数,第 i 个数表示第 i 次操作加入的魔咒字符。
1≤n≤100000。,用来表示魔咒字符的数字 x 满足 1≤x≤10^9

Output

输出 n 行,每行一个数。第 i 行的数表示第 i 次操作后 S 的生成魔咒数量

 

Sample Input

7
1 2 3 3 3 1 2

Sample Output

1
3
6
9
12
17
22

BZOJ4516: [Sdoi2016]生成魔咒 后缀自动机的更多相关文章

  1. &lbrack;bzoj4516&rsqb;&lbrack;Sdoi2016&rsqb;生成魔咒——后缀自动机

    Brief Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生 ...

  2. BZOJ 4516&colon; &lbrack;Sdoi2016&rsqb;生成魔咒 &lbrack;后缀自动机&rsqb;

    4516: [Sdoi2016]生成魔咒 题意:询问一个字符串每个前缀有多少不同的子串 做了一下SDOI2016R1D2,题好水啊随便AK 强行开map上SAM 每个状态的贡献就是\(Max(s)-M ...

  3. BZOJ 4516&colon; &lbrack;Sdoi2016&rsqb;生成魔咒 后缀自动机 性质

    http://www.lydsy.com/JudgeOnline/problem.php?id=4516 http://blog.csdn.net/doyouseeman/article/detail ...

  4. BZOJ 4516 &lbrack;Sdoi2016&rsqb;生成魔咒 ——后缀自动机

    本质不同的字串,考虑SA的做法,比较弱,貌似不会. 好吧,只好用SAM了,由于后缀自动机的状态最简的性质, 所有不同的字串就是∑l[i]-l[fa[i]], 然后后缀自动机是可以在线的,然后维护一下就 ...

  5. BZOJ&period;4516&period;&lbrack;SDOI2016&rsqb;生成魔咒&lpar;后缀自动机 map&rpar;

    题目链接 后缀数组做法见这. 直接SAM+map.对于每个节点其产生的不同子串数为len[i]-len[fa[i]]. //15932kb 676ms #include <map> #in ...

  6. BZOJ4516&colon; &lbrack;Sdoi2016&rsqb;生成魔咒&lpar;后缀数组 set RMQ&rpar;

    题意 题目链接 Sol 毒瘤SDOI 终于有一道我会做的题啦qwq 首先,本质不同的子串的个数 $ = \frac{n(n + 1)}{2} - \sum height[i]$ 把原串翻转过来,每次就 ...

  7. &lbrack;SDOI2016&rsqb;生成魔咒&lpar;后缀自动机&rpar;

    /* 水题, 根据性质做就行, nq不会对答案产生贡献, 那么只算p的贡献就好了 */ #include<cstdio> #include<algorithm> #includ ...

  8. &lbrack;SDOI2016&rsqb; 生成魔咒 - 后缀数组&comma;平衡树&comma;STL&comma;时间倒流

    [SDOI2016] 生成魔咒 Description 初态串为空,每次在末尾追加一个字符,动态维护本质不同的子串数. Solution 考虑时间倒流,并将串反转,则变为每次从开头删掉一个字符,即每次 ...

  9. BZOJ4516 &lbrack;Sdoi2016&rsqb;生成魔咒 【后缀自动机】

    题目 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1,2, ...

随机推荐

  1. java 22 - 14 JDK1&period;5以后的Lock锁

    在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对 ...

  2. org&period;springframework&period;beans&period;factory&period;annotation&period;Autowired&lpar;required&equals;true&rpar;

    Injection of autowired dependencies failed ERROR org.springframework.web.context.ContextLoader  - Co ...

  3. php 请求参数限制

    公司有个群发短信的小项目,项目上线了很久也没有什么问题,最近有商家说 我短信群发不能用 现象是:发现有时候可以发送,有时候不可以发送,看截图发送的手机数量不一样 通过调试php代码发现 php 只接受 ...

  4. hdu1116

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 #include<stdio.h> #include<math.h> #inclu ...

  5. (转)&lbrack;OSX&rsqb; 在 OS X 中安装 MacPorts 指南

    原地址:http://www.cnblogs.com/ifantastic/p/3677066.html 什么是MacPorts? MacPorts是使用于Mac OS中第三方包管理工具. MacPo ...

  6. Word2Vec之Deep Learning in NLP (一)词向量和语言模型

    转自licstar,真心觉得不错,可惜自己有些东西没有看懂 这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领域中应用的理解和总结,在此分享.其中必然有局限性,欢迎各种交 ...

  7. JavaScript之面向对象1

    学习过Java程序的开发人员都知道面向对象是怎么回事. 面向对象无非就是封装.多态.继承 比如: 声明一个类: class Person{ //私有成员 private String name; pr ...

  8. 给EasyUI的DateBox控件添加清除button

     EasyUI中间DateBox控制甚至没有被清除button.例如下面的附图: 真是不可思议,对于要求日期格式必须选择的情况下,不能清空日期,很不方便.      尽管能够通过手工改动EasyU ...

  9. 模仿Wireshark网络抓包工具实现---c&plus;&plus;

    最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理,我就自己好奇写了一个实现基本功能的demo吧. 其实叫抓包工具,其实就是抓取流经自己网卡的所有ip ...

  10. Greys学习笔记&lpar;未完待续&rpar;

    Greys介绍 greys-anatomy是一个Java线上诊断工具,取名来自美剧<实习医生格雷>,由菜鸟-杜琨同学开发维护.比我们常用的脚本工具btrace提供更多的功能,greys采用 ...