![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀数组
lalala???
这个作者很懒,什么都没留下…
展开
-
leetcode 第 59 场双周赛 5837. 划分数字的方案数 题解
前置知识:后缀数组,RMQ区间最值,简单dp。首先我们会想到使用dp的思路来解决,dp[i][j] 表明当前第i个位置为结尾往前j个位置截取出来当作一个数的方案数,dp[i][j] 就是对于 i-j+1 位置为结尾上小于当前截取的值的方案数的和,因为每次要选取不同的j,这样就是n的平方的时间复杂度,还要每次比对数的大小是n的时间复杂度,最终的时间复杂度就是n的三次方。仔细思考一下,发现只能简化数字的对比,字符串排序就能得到大小,只要求出 rank[i-j+1] +1 和 rank[i-j-j+1]原创 2021-08-22 01:02:10 · 195 阅读 · 0 评论 -
F - Mr. Panda and Fantastic Beasts Gym - 101194F
题解:对于每个字符串后面加一个特殊符号把所有的串连接在一起,然后在后缀数组中找到后缀的位置出现在第一个串,对于这个串找到前后最近的不是第一个串的字符串,取height数组前后区间最小值的最大值,如果后缀小于第一个串中以i为起点的后缀长度,取最小值,如果最小值相同,取rak最小的。代码:#include <bits/stdc++.h>using namespace std;...原创 2019-11-21 08:52:36 · 250 阅读 · 0 评论 -
K-th occurrence
题意: 给定区间 [l,r] 和 k,求和区间 [l,r] 相同的串的第k个位置在哪?题解:利用后缀数组求出height数组,因为排名相近的两个串是最想像的串,所以st表求区间最小值,找到字符相同的串的区间,然后利用主席树存sa值求第k大。代码:#include <bits/stdc++.h>using namespace std;typedef long long ...原创 2019-08-24 18:46:50 · 486 阅读 · 0 评论