BZOJ4516: [Sdoi2016]生成魔咒

BZOJ4516: [Sdoi2016]生成魔咒

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

题解Here!
据说这题可以被$SAM$秒杀,然而本蒟蒻只会$SA$。。。
题目要求出每一个前缀本质不同的后缀的个数。
那么我们可以把原序列倒过来,然后实际上就是对于每一个后缀求与其它后缀不重复的前缀个数,也即是后缀长度减去$height$。
求出某一个后缀对答案的贡献之后,他不应该停留在元序列中对后续答案的求解产生影响,所以应该把它删除。
这个可以用平衡树来完成。
但是考虑到每一个位置只与前后有关,我们可以用链表来代替。
还有,要离散化。。。
附代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define MAXN 100010
using namespace std;
int n;
int val[MAXN],num[MAXN],SBT_front[MAXN],SBT_next[MAXN];
long long ans[MAXN];
int top,sa[MAXN],rk[MAXN],height[MAXN],tax[MAXN],tp[MAXN];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
void radixsort(){for(int i=0;i<=top;i++)tax[i]=0;for(int i=1;i<=n;i++)tax[rk[i]]++;for(int i=1;i<=top;i++)tax[i]+=tax[i-1];for(int i=n;i>=1;i--)sa[tax[rk[tp[i]]]--]=tp[i];
}
void suffixsort(int x){top=x;for(int i=1;i<=n;i++){rk[i]=val[i];tp[i]=i;}radixsort();for(int w=1,p=0;p<n;top=p,w<<=1){p=0;for(int i=1;i<=w;i++)tp[++p]=n-w+i;for(int i=1;i<=n;i++)if(sa[i]>w)tp[++p]=sa[i]-w;radixsort();swap(tp,rk);rk[sa[1]]=p=1;for(int i=2;i<=n;i++)rk[sa[i]]=(tp[sa[i-1]]==tp[sa[i]]&&tp[sa[i-1]+w]==tp[sa[i]+w])?p:++p;}
}
void getheight(){for(int i=1,j,k=0;i<=n;i++){if(k)k--;j=sa[rk[i]-1];while(val[i+k]==val[j+k])k++;height[rk[i]]=k;}
}
void work(){for(int i=1;i<=n;i++){SBT_front[i]=i-1;SBT_next[i]=i+1;}for(int i=1;i<=n;i++){int now=n-i+1-max(height[rk[i]],height[SBT_next[rk[i]]]);ans[i]=(long long)now;height[SBT_next[rk[i]]]=min(height[rk[i]],height[SBT_next[rk[i]]]);height[rk[i]]=0;if(rk[i]!=1)SBT_next[SBT_front[rk[i]]]=SBT_next[rk[i]];SBT_front[SBT_next[rk[i]]]=SBT_front[rk[i]];}for(int i=n;i>=1;i--)ans[i]+=ans[i+1];for(int i=n;i>=1;i--)printf("%lld\n",ans[i]);
}
void init(){n=read();for(int i=1;i<=n;i++)num[i]=val[n-i+1]=read();sort(num+1,num+n+1);int k=unique(num+1,num+n+1)-num-1;for(int i=1;i<=n;i++)val[i]=lower_bound(num+1,num+k+1,val[i])-num;suffixsort(k+1);getheight();
}
int main(){init();work();return 0;
}

 

转载于:https://www.cnblogs.com/Yangrui-Blog/p/9447643.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab画泡面图,MATLAB中,( )函数可以保存图像并指定为图像文件格式。

The word "tunnel visioned "(Para 3, Line 2) most probably means______ .[解析] 男&#xff1a;简直不敢相信&#xff0c;我通过了所有考试。 女&#xff1a;被我说中了吧&#xff0c;看看你前几天&#xff0c;不是晚上失眠就是白天在屋子里走来走去的&#xff0c…

全国计算机等级考试题库二级C操作题100套(第57套)

第57套&#xff1a; 函数fun的功能是&#xff1a;把形参a所指数组中的最小值放在元素a[0]中&#xff0c;接着把 形参a所指数组中的最大值放在a[1]元素中&#xff1b;再把a所指数组元素中的次小值放 在a[2]中&#xff0c;把a所指数组元素中的次大值放在a[3]&#xff1b;其余以此…

mysql redis hbase_MySQL之基本介绍

MySQL基本介绍在学习任何一款编程语言的过程中&#xff0c;我们会发现如果我们想要存储一些数据到本地硬盘的时候无疑是有些麻烦的。今天&#xff0c;我们就学一个和储存数据有关的数据库管理系统——MySQL。为啥要学会使用数据库呢&#xff1f;因为数据库可以方便的将数据存放…

POJ-1556 The Doors 线段相交+最短路

题意&#xff1a;在一个矩形平面内&#xff0c;有若干道墙&#xff0c;现求从左部某一点到右部某一点的最短路径。 解法&#xff1a;有一个事实是线路一定是从门两边的点上通过的&#xff0c;不可能出现从中间穿过的可能。因此我们就枚举两两点之间是否可达&#xff0c;这里就要…

【matlab】Matlab三维绘图指南

Matlab是一种强大的数学计算和可视化工具,而三维绘图是其功能之一。通过Matlab的三维绘图功能,我们可以创建精美、直观的三维图形,展示和分析复杂的数据。本文将为您提供一份简明的Matlab三维绘图指南,帮助您快速上手并创建出令人印象深刻的三维图形。 准备数据在开始绘制三…

laravel mysql视图,在 Laravel 视图文件中引入 bootstrap

如何在 Laravel 视图文件中引入 bootstrap&#xff1f;对于从来没有接触过 PHP 开发框架的菜鸟来说&#xff0c;这确实是个问题。在我们这些菜鸟传统的认知里&#xff0c;要在一个 html/php 文件里引入一个外部 css 文件&#xff0c;link 标签 href 属性的值&#xff0c;应该填…

全国计算机等级考试题库二级C操作题100套(第58套)

第58套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;把形参s所指字符串中最右边的n个字符复制 到形参t所指字符数组中&#xff0c;形成一个新串。若s所指字符串的长度小于n&#xff0c;则将整个 字符串复制到形参t所指字符数组中。例如&#xff0c;形参s所…

linux mysql 修改root密码_Mac下重置mysql的root密码

php中文网最新课程每日17点准时技术干货分享我的mysql版本 MYSQL V5.7.9&#xff0c;旧版本请使用&#xff1a;UPDATE mysql.user SET PasswordPASSWORD(新密码) WHERE Userroot;Mac OS X - 重置 MySQL Root密码密码太多记不住&#xff1f;&#xff1f;你是否忘记了Mac OS 的My…

DHCP option 150与option 66的区别

转载于:https://blog.51cto.com/jaymimijay/1150777

全国计算机等级考试题库二级C操作题100套(第59套)

第59套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;在34的矩阵中找出在行上最大、在列上最小的那个元素&#xff0c;若没有符合条件的元素则输出相应信息。 例如&#xff0c;有下列矩阵&#xff1a; 1 2 13 4 7 8 10 6 3 5 9 7 程序执行结果为&#xff1a…

python期末知识点_史上最全的Python知识点整理之基本语法

一、程序的格式框架 1.缩进 缩进是指每行语句前的空白区域&#xff0c;用来表示Python程序间的包含和层次关系。 一般语句不需要缩进&#xff0c;顶行书写且不留空白。 当表示分支、循环、函数、类等含义&#xff0c;在if&#xff0c;while&#xff0c;for&#xff0c;def&…

升降压斩波电路matlab,升降压直流斩波电路及matlab仿真.doc

升降压直流斩波电路及matlab仿真目录绪论………………………………………………………………….3降压斩波电路…………………………………………………..6直流斩波电路工作原理及输出输入关系……………12D c&#xff0f;D C变换器的设计…………………………………………18测试…

AIX下RAC巡检文档 (上)

一、操作系统查看1 1> 查看操作系统&#xff08;AIX 文件系统是否合理&#xff09; 方式: " df -m ,查看所有的文件系统大小 是否>2G" 结果类似下面: $df -m Filesystem MB blocks Free %Used Iused %Iused Mounted on /dev/hd4 …

php网页多个倒计时,怎么实现一个页面有多个倒计时同时进行

后台返回时间&#xff0c;一个页面中有多个表格每个表格中有一行用来显示后台给的时间&#xff0c;比如说后台给一号表格10分钟的倒计时时间&#xff0c;给2号表格15分钟的倒计时时间&#xff0c;那我要怎么做才能使得这两个倒计时都能进行&#xff1f;&#xff1f;我自己模拟了…

全国计算机等级考试题库二级C操作题100套(第60套)

第60套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。 请在程序的下划线处填入正确的内容并把下划线删除&#xff0c;使程序得出正确的结果。 注意&#xff1a;源程序存放在考生文件夹下的BLANK1.C中。 不…

opencv在python环境下的安装_python环境下安装opencv库的方法

注意&#xff1a;安装opencv以前须要先安装numpy&#xff0c;matplotlib等python 1、安装方法windows 方法1、在线安装函数 1.先安装opencv-python测试 pip install opencv-python --userspa个人python版本是3.6.8&#xff0c;能够看到opencv安装的默认版本是 opencv_python-4.…

接口的创建及使用

接口是全局变量和公共的抽象方法集合。它也是一种定义数据类型的方式&#xff0c;与类相比 相同之处&#xff1a;都是成员变量和成员方法也可以形成继承关系。 不同之处&#xff1a;接口中的属性都是常量&#xff08;final&#xff09;接口中的方法是抽象方法&#xff08;没有方…

博客的未来仍然光明

博客的未来仍然光明 博客&#xff0c;能够实现欲望表达&#xff0c;自我实现&#xff0c;同时又能阶段性的形成自己的著作&#xff0c;取得一定的收益。目前在博客圈里不缺好作者&#xff0c;不缺平台&#xff0c;不缺读者&#xff0c;缺氛围。我们更需要的是&#xff0c;一个帮…

movielens推荐系统_基于内容推荐(二)

A content-based movie recommender system using MovieLens tags &#xff08;用标签构建一个简单的电影推荐系统&#xff09;现在有很多电影。如果没有某种推荐系统&#xff0c;您会担心&#xff0c;随着时间的流逝&#xff0c;用户可能会被他们不关心的电影所淹没。因此&…

全国计算机等级考试题库二级C操作题100套(第61套)

第61套&#xff1a; 函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写英文字母&#xff1b;若ch中是大写英文字母&#xff0c;则转换成对应的小写英文字母&#xff1b;若是其它字符则保持不变&#xff1b;并将转换后的结果作为函数值返回。 请在程序…