CF1063F String Journey DP、SAM、线段树
为了方便把串反过来,条件变为\(t_i\)是\(t_{i+1}\)的真子串,答案显然不变。
一件重要的事情是必定存在一种最优解,字符串序列\(\{t\}\)满足\(|t_i| = i\)。
考虑DP:设\(f_i\)表示字符串序列\(\{t\}\)的最后一个串的结尾位置为\(i\)时,\(|t|\)的最大值。不难发现如果\(f_i = x\),那么一定存在最后一个串结尾位置为\(i\)、长度在\([1,x]\)内的字符串序列。
因为有\(f_i \leq f_{i-1}+1\)(因为对于一个能够满足序列长度为\(f_i\)、最后一个串结尾为\(i\)的字符串序列\(t\),把第一个字符串删掉,然后把其他的串的最后一个字符删掉,就可以得到序列长度为\(f_i - 1\)、最后一个串结尾为\(i-1\)的一个合法的字符串序列),所以可以从大到小枚举\(f_i\)的合法取值,这里的总check次数是\(O(n)\)的。
那么问题变成如何check。考虑我们实际上只需要满足\(s_{1,i - f_i}\)中是否存在一个\(s_{i - f_i + 1 , i}\)的子串满足该串的结尾的\(f\)值大于等于\(f_i - 1\)。注意到可能满足条件的只有两个子串(\(s_{i - f_i + 1 , i - 1}\)和\(s_{i - f_i + 2 , i}\)),所以我们只需要知道这些点所有\(\leq i - f_i\)的endpos中的\(f\)值的最大值。注意到\(i - f_i\)是单调不降的,所以我们可以使用一个指针维护当前询问的前缀,在线段树上做单点修改、子树查询最大值即可。
CF1063F String Journey DP、SAM、线段树的更多相关文章
- [CF1063F]String Journey[后缀数组+线段树]
题意 在 \(S\) 中找出 \(t\) 个子串满足 \(t_{i+1}\) 是 \(t_{i}\) 的子串,要让 \(t\) 最大. \(|S| \leq 5\times 10^5\). 分析 定义 ...
- bzoj1396识别子串(SAM+线段树)
复习SAM板子啦!考前刷水有益身心健康当然这不是板子题/水题…… 很容易发现只在i位置出现的串一定是个前缀串.那么对答案的贡献分成两部分:一部分是len[x]-fa~len[x]的这部分贡献会是r-l ...
- CF1063F. String Journey(后缀数组+线段树)
题目链接 https://codeforces.com/contest/1063/problem/F 题解 虽然本题有时间复杂度较高但非常好写的做法...... 首先,若答案为 \(k\),则一定存在 ...
- CF700E-Cool Slogans【SAM,线段树合并,dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF700E 题目大意 给出一个字符串\(S\),求一个最大的\(k\)使得存在\(k\)个字符串其中\(s_1\)是 ...
- CF700E Cool Slogans——SAM+线段树合并
RemoteJudge 又是一道用线段树合并来维护\(endpos\)的题,还有一道见我的博客CF666E 思路 先把\(SAM\)建出来 如果两个相邻的串\(s_i\)和\(s_{i+1}\)要满足 ...
- Codeforces 700E. Cool Slogans 字符串,SAM,线段树合并,动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF700E.html 题解 首先建个SAM. 一个结论:对于parent树上任意一个点x,以及它所代表的子树内任 ...
- CF700E:Cool Slogans(SAM,线段树合并)
Description 给你一个字符串,如果一个串包含两个可有交集的相同子串,那么这个串的价值就是子串的价值+1.问你给定字符串的最大价值子串的价值. Input 第一行读入字符串长度$n$,第二行是 ...
- CF1037H Security——SAM+线段树合并
又是一道\(SAM\)维护\(endpos\)集合的题,我直接把CF700E的板子粘过来了QwQ 思路 如果我们有\([l,r]\)对应的\(SAM\),只需要在上面贪心就可以了.因为要求的是字典序比 ...
- CF666E Forensic Examination——SAM+线段树合并+倍增
RemoteJudge 题目大意 给你一个串\(S\)以及一个字符串数组\(T[1...m]\),\(q\)次询问,每次问\(S\)的子串\(S[p_l...p_r]\)在\(T[l...r]\)中的 ...
随机推荐
- 向量召回 vearch
开源向量召回工具 https://github.com/vearch/vearch 架构
- 微信小程序之上传图片(含前后端代码例子)
此代码示例,能够让你成功将图片上传至后端,后端做相应的处理,然后返回成功码. 前端小程序代码 index.wxml: <view class='content'> <view cla ...
- mysql(五)执行计划
参考文档 http://blog.itpub.net/12679300/viewspace-1394985/
- Linux kill、kill-15、kill-9区别
进程状态转换图 kill和kill -9,两个命令在linux中都有杀死进程的效果,然而两命令的执行过程却大有不同,在程序中如果用错了,可能会造成莫名其妙的现象. 执行kill(不加 -* 默认kil ...
- 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'TableName'中的标识列指定显式值
当某表的一个列为自动增长列,是无法直接通过insert语句向给字段写入指定值,解决方法: SET IDENTITY_INSERT TABLE_NAME ON; INSERT INTO TABLE_NA ...
- bind named.conf 的理解
[root@46 /]#yum -y install bind bind-chroot bind-libs bind-utils caching-nameserver目录说明/var/named/ch ...
- 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买
作者图书京东链接,请点击------>>> **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...
- ubuntu iptables重启生效:
ubuntu iptables重启生效:save roles to a file:iptables-save >/etc/iptables.roles edit /etc/network/int ...
- H3C交换机如何删除VLAN
H3C交换机如何删除VLAN,如果直接使用“undo vlan”是删不干净的,因为配置VLAN时还配置过接口. 1.首先通过console口或telnet连接三层交换机,进入用户视图模式”<H3 ...
- java判断文件真实类型
代码如下: import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; /** * &l ...