摘要: 后缀自动机 把每个串用不同的没有出现过字符连接起来,这样保证不会被一个串的结尾和另一个串的开头当成一个后缀。。 然后二分串的长度,对height分组,找height大于mid的最长公共前缀,且在一组内出现在一半的字符串时就返回true。 include define INF 0x3f3f3f3f d 阅读全文
posted @ 2019-08-28 14:31 清楚少女ひなこ 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 后缀数组 求本质不同的子串,转换为求本质不同的后缀的前缀,每个后缀贡献的前缀数量减去与上一个重复的前缀即为答案。 include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define __fastIn ios::s 阅读全文
posted @ 2019-08-26 11:13 清楚少女ひなこ 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 后缀数组 要求统计出现两次以上不重叠的子串,其实就是统计出现两次以上不重叠的后缀的前缀,不难想到height数组。 相邻的后缀只有包含和被包含关系,或者不在同一块内,重复出现的前缀肯定在这块的height里,所以我们统计连续块内最小和最大的sa相减判断是否满足条件即可。 include define 阅读全文
posted @ 2019-08-26 11:11 清楚少女ひなこ 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 整体二分模板题 如果没有修改的询问区间第k小or大,一般把原始值看成赋值操作,这样可以把询问和赋值同时二分,正确性显然。 如果是单点修改,同样可以用树状数组赋值,修改一个数看 1再+1,因为每次增加和修改是成对出现的且二分不改变询问和修改的顺序,所以显然二分也是正确的。 区间插入的话,和普通的整体二 阅读全文
posted @ 2019-08-22 20:54 清楚少女ひなこ 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 分治 + ST表 先预处理出区间内最大值的位置和每个数向左和向右能够延伸的最大距离。 然后把每个区间的最大值的位置当成中点来分治统计每个数的贡献。 统计的时候选区间较短的统计,类似于启发式合并? 阅读全文
posted @ 2019-08-22 20:49 清楚少女ひなこ 阅读(141) 评论(0) 推荐(0) 编辑
摘要: CDQ分治 求矩形面积可以看成类似二位前缀和的加减 这样就可以把题目看成x,y,t的三维偏序问题,直接上CDQ分治。 这里不用去重,但是我们在排序的时候一定要把三个维度相同的询问放在修改后面,因为CDQ每次分治都是计算左边对右边的贡献。 include define INF 0x3f3f3f3f d 阅读全文
posted @ 2019-08-22 17:50 清楚少女ひなこ 阅读(180) 评论(0) 推荐(0) 编辑
摘要: AC自动机 + 树状数组 这道题暴力把询问离线排序之后,直接用AC自动机找答案可以拿到70分。。 正解应该是考虑fail树和trie树父亲节点的意义。 题目是让我们求第x个单词在第y个中出现了多少次,我们先看第y个单词在trie中的意义。 假设第y个单词在trie中以p节点结尾,那么p节点的父亲节点 阅读全文
posted @ 2019-08-20 16:43 清楚少女ひなこ 阅读(176) 评论(0) 推荐(0) 编辑
摘要: AC自动机模板 阅读全文
posted @ 2019-08-18 20:59 清楚少女ひなこ 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 暴力LIS 反着做比较好写,把解冻看成冻住,每次看冻住的位置是不是当前LIS中的位置,如果不是就直接删除,如果是,就暴力重新计算一次LIS include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define __ 阅读全文
posted @ 2019-08-16 16:51 清楚少女ひなこ 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 线段树扫描线模板 include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define __fastIn ios::sync_with_stdio(false), cin.tie(0) define pb push 阅读全文
posted @ 2019-08-15 11:54 清楚少女ひなこ 阅读(81) 评论(0) 推荐(0) 编辑