![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树合并
fyc_kabuto
一个蒟蒻程序员
展开
-
4556: [Tjoi2016&Heoi2016]字符串(后缀自动机做法)
题目大意:给出两段区间,求其中一段的所有子串与另一段的最长公共前缀。 做法:听说可以用后缀数组作,不过忘得差不多了,与是愉快的敲了sam。好像还挺有收获的。 首先原串反过来建,这样题目就转化成了一段的所有子串与另一段的最长公共后缀,这样就可以识别了。 假设要在s【a,b】中找最长后缀在s【c,d】中出现过(反串后),那么我们先找到以b结尾的前缀在parent树上的位置, 接着我们二分答案m原创 2017-07-05 15:18:51 · 576 阅读 · 0 评论 -
bzoj 1483: [HNOI2009]梦幻布丁
题目大意:可以把一种颜色完全染为另一种颜色,问颜色段数。 我用了线段树合并。对每种颜色开一棵线段树每一段记下左边和右边是否有这种颜色,就可以维护了。 然而无限RE,拍又拍不出。留坑。 难道要离散化?可是std也没有啊? 向大神求助。 #include #include #include #include using namespace std; struct trnode{ int l原创 2017-07-19 13:09:13 · 323 阅读 · 1 评论 -
bzoj 3545: [ONTAK2010]Peaks
题意: 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1。 题解: 直接离线+线段树合并。 #include<cstdio> #include<cstd...原创 2018-03-07 17:08:49 · 192 阅读 · 0 评论 -
codeforces 666E. Forensic Examination
题意: 给一些模式串,每次询问询问串的子串在[l,r][l,r][l,r]中的哪个模式串出现最多。 题解: 好久久久久久久久久久久久久没写字符串相关,调的简直心态爆炸。 直接建出广义sam,每次就相当于询问一个子树的众数。 用可持久化线段树合并即可。 具体细节见代码,线段树合并很久没写写错几次。 code: #include<vector> #include<cs...原创 2018-08-07 08:54:45 · 273 阅读 · 0 评论 -
uoj 395. 【NOI2018】你的名字
题意: 给出一个模式串SSS,多次询问询问串有多少本质不同的子串在s[l,r]s[l,r]s[l,r]中没有出现。 题解: 这题好像不是很难 首先68分比较sb,对于每个TTT的前缀,只要能求出最短的还没有在TTT中出现过的,和最短的还没有在SSS中出现过的后缀,就能计算这个前缀的贡献。 转为求最长的出现过的,就是sam经典操作。 现在加上了l,rl,rl,r这个限制,影响的只有在SSS中的的部分...原创 2019-01-24 11:14:38 · 337 阅读 · 2 评论