随笔分类 -  后缀数组

摘要:Find String in a Grid 把矩阵按行接起来求一个SA, 把矩阵按列接起来求一个SA, 然后就枚举询问串的转折点, 转换成求矩阵内二维数点的个数。 阅读全文
posted @ 2019-11-07 13:54 NotNight 阅读(347) 评论(0) 推荐(0)
摘要:Yet Another LCP Problem 把sa求出来之后, 对于每个询问用单调栈处理。 阅读全文
posted @ 2019-10-16 13:59 NotNight 阅读(138) 评论(0) 推荐(0)
摘要:Mike and Friends 求出后缀数组, 对于每个询问二分出左右端点, 离线之后用树状数组求就好了。 或者不建st表, 用并查集求出左右端点, 这样空间和常数都更优。 阅读全文
posted @ 2019-07-13 15:00 NotNight 阅读(167) 评论(0) 推荐(0)
摘要:并查集合并的时候更新信息。注意a[ i ] 有负的。 阅读全文
posted @ 2019-07-04 20:03 NotNight 阅读(185) 评论(0) 推荐(0)
摘要:按lcp合并计算答案。 阅读全文
posted @ 2019-07-04 15:45 NotNight 阅读(227) 评论(0) 推荐(0)
摘要:因为强制在线所以只能转成序列上的问题然后树套树了。。。 阅读全文
posted @ 2019-04-25 11:24 NotNight 阅读(277) 评论(0) 推荐(0)
摘要:Liar 刚开始感觉只要开个dp[ i ][ j ][ 0 / 1 ]表示处理了s的前 i 个用了 k 段, i 是否是最后一段的最后一个字符 的 t串最长匹配长度, 然后wa24, 就gg了。感觉这个转移感觉很对, 但是实际上不对。。。 比如s = ababcde, t = abcde, x = 阅读全文
posted @ 2019-04-12 14:05 NotNight 阅读(291) 评论(0) 推荐(0)
摘要:E - Forensic Examination 我也不知道为什么这个复杂度能过, 而且跑得还挺快, 数据比较水? 在sa上二分出上下界, 然后莫队 + 线段树维护区间众数。 阅读全文
posted @ 2019-04-08 14:04 NotNight 阅读(208) 评论(0) 推荐(0)
摘要:Paper task 如果不要求本质不同直接st表二分找出最右端, 然后计数就好了。 要求本质不同, 先求个sa, 然后用lcp求本质不同就好啦。 阅读全文
posted @ 2019-04-03 13:47 NotNight 阅读(146) 评论(0) 推荐(0)
摘要:#include #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair #define PLI pair #define PII pair #define SZ(x) ((int)x.size()) #define ull unsigned long long ... 阅读全文
posted @ 2019-03-25 19:20 NotNight 阅读(269) 评论(0) 推荐(0)
摘要:K - Relevant Phrases of Annihilation 题目大意:给你 n 个串,问你最长的在每个字符串中出现两次且不重叠的子串的长度。 思路:二分长度,然后将height分块,看是否存在一个块里面 每个串都符合条件。 阅读全文
posted @ 2018-07-20 22:19 NotNight 阅读(210) 评论(0) 推荐(0)
摘要:D - New Distinct Substrings 题目大意:求一个字符串中不同子串的个数。 裸的后缀数组 阅读全文
posted @ 2018-07-20 21:30 NotNight 阅读(140) 评论(0) 推荐(0)
摘要:#include #define LL long long #define fi first #define se second #define mk make_pair #define pii pair #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; const int N = 1e5 + 7; co... 阅读全文
posted @ 2018-07-20 21:21 NotNight 阅读(193) 评论(0) 推荐(0)
摘要:B - Symmetric Matrix 思路:将矩阵转换成图的形式,然后推公式。 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define 阅读全文
posted @ 2018-07-20 10:26 NotNight 阅读(321) 评论(0) 推荐(0)
摘要:题目大意:有n个点, 每个点有一个数字0 - 9, 第 i 个点只能到 第(i * i + 1)个点,问你在哪个点出发走n次构成的数字串最大。 思路:利用求后缀数组的倍增比较思想, 许多细节需要注意。 阅读全文
posted @ 2018-05-06 16:06 NotNight 阅读(195) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #define LL long long 4 #define fi first 5 #define se second 6 #define mk make_pair 7 #define pii pair 8 9 using namespace std; 10 11 const int N=2e5+7; 12 const int... 阅读全文
posted @ 2018-05-02 15:19 NotNight 阅读(159) 评论(0) 推荐(0)