线段树合并
fyc_kabuto
一个蒟蒻程序员
展开
-
4556: [Tjoi2016&Heoi2016]字符串(后缀自动机做法)
题目大意:给出两段区间,求其中一段的所有子串与另一段的最长公共前缀。做法:听说可以用后缀数组作,不过忘得差不多了,与是愉快的敲了sam。好像还挺有收获的。首先原串反过来建,这样题目就转化成了一段的所有子串与另一段的最长公共后缀,这样就可以识别了。假设要在s【a,b】中找最长后缀在s【c,d】中出现过(反串后),那么我们先找到以b结尾的前缀在parent树上的位置,接着我们二分答案m原创 2017-07-05 15:18:51 · 601 阅读 · 0 评论 -
bzoj 1483: [HNOI2009]梦幻布丁
题目大意:可以把一种颜色完全染为另一种颜色,问颜色段数。我用了线段树合并。对每种颜色开一棵线段树每一段记下左边和右边是否有这种颜色,就可以维护了。然而无限RE,拍又拍不出。留坑。难道要离散化?可是std也没有啊?向大神求助。#include#include#include#includeusing namespace std;struct trnode{ int l原创 2017-07-19 13:09:13 · 334 阅读 · 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 · 198 阅读 · 0 评论 -
codeforces 666E. Forensic Examination
题意:给一些模式串,每次询问询问串的子串在[l,r][l,r][l,r]中的哪个模式串出现最多。题解:好久久久久久久久久久久久久没写字符串相关,调的简直心态爆炸。 直接建出广义sam,每次就相当于询问一个子树的众数。 用可持久化线段树合并即可。 具体细节见代码,线段树合并很久没写写错几次。 code:#include<vector>#include<cs...原创 2018-08-07 08:54:45 · 304 阅读 · 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 · 363 阅读 · 2 评论