摘要: 【传送门:BZOJ2588】 简要题意: 给出n个节点的树,每个点有权值,有m个询问,每个询问输入x,y,k,求出x到y的路径上第k小的值 题解: 树上主席树,将根往下合并主席树 如果要得到x到y的主席树,就将rt[x]+rt[y]-rt[lca]-rt[fa[lca]]就能得到x到y的路径的信息了 阅读全文
posted @ 2018-04-12 20:05 Star_Feel 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 【传送门:BZOJ1342】 简要题意: 给出n个数的序列,要选出连续m个数,使得这些数的最大值-最小值<=c 求出所有m个数的序列的第一个数的位置,如果没有输出NONE 题解: 直接单调队列,不解释 参考代码: 阅读全文
posted @ 2018-04-12 16:06 Star_Feel 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 【传送门:BZOJ3613】 简要题意: 给出一个长度为n的A序列,可以使序列里的数增加或减小一个数,使得整个序列呈不下降序列 设B数组为最后的不下降序列 求出最小的ans=Max{|A[j]-B[j]|,1≤j≤n} 题解: 水题 直接二分改变大小,然后判断就可以了 输入的时候取mod要勤奋一点 阅读全文
posted @ 2018-04-12 15:38 Star_Feel 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 【传送门:SPOJ1811&BZOJ2946】 简要题意: 给出若干个字符串,求出这些字符串的最长公共子串 题解: 后缀自动机 这两道题的区别只是在于一道给出了字符串个数,一个没给,不过也差不多(代码就贴SPOJ的,因为数据范围大一点) 首先用第一个字符串构造SAM 然后处理其他的每个串在后缀自动机 阅读全文
posted @ 2018-04-12 15:08 Star_Feel 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 【传送门:SPOJ1811】 简要题意: 给出两个字符串,求出两个字符串的最长公共子串 题解: 后缀自动机 先用第一个字符串构建SAM,然后用第二个字符串去跑 假设当前的公共子串长度为s,在SAM的状态为p,匹配到第二个字符串的第i个字符 如果p存在连向第i个字符的边,则p=tr[p].son[st 阅读全文
posted @ 2018-04-12 11:39 Star_Feel 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 【传送门:BZOJ4516】 简要题意: 给出一个长度为n的数字字符串,求出每个数字插入到字符串结尾时的不同子串个数 题解: 后缀自动机 对于一个状态s,他的right集合代表的子串的长度就是(dep[fail],dep[s]]。这道题我们需要动态的维护不同子串的个数,每次从头扫一遍直接计算肯定不行 阅读全文
posted @ 2018-04-12 10:21 Star_Feel 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 【传送门:BZOJ3998】 简要题意: 对于一个给定长度为N的字符串,求它的第K小子串是什么 题解: 后缀自动机 首先对于T=0的时候,所有的能到达的不同状态,Right集合大小恒为1 T=1的时候,就累加 然后先判断子串数量是否超过K 如果没有,则直接DFS就好了 参考代码: 阅读全文
posted @ 2018-04-12 09:15 Star_Feel 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 【传送门:SPOJ8222】 简要题意: 给出一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值。求F(1)..F(Lengh(S)); 题解: 后缀自动机的模板题(会SAM是没有用的,会DP和广义才有用——Cherish_OI) 只要求出每个状态的Right集合的个数就可以求出 阅读全文
posted @ 2018-04-12 08:14 Star_Feel 阅读(123) 评论(0) 推荐(0) 编辑