题目分析: 这道题我是乱搞的,因为他说$01$串是随机的. 那么我们可以猜测能够让LCP变大的地方很少.求出后缀数组之后可能让LCP变大的地方就等价于从大到小往height里动态加点同时维护这个点左右两边的单调栈. 这个事情用线段树模拟就行了. 用暴力跑一下发现果然不大,只有200w,其中很多还是废点,把废点特判一下删除掉就行了. 然后把询问离线,按r排序,再作扫描线,每次扫到r的时候把前面变动的LCP更新一下.然后对于询问也做一个类似上面单调栈的操作. 代码: #include<bits/st…
[Luogu3732][HAOI2017]供给侧改革(Trie树) 题面 洛谷 给定一个纯随机的\(01\)串,每次询问\([L,R]\)之间所有后缀两两之间的\(LCP\)的最大值. 题解 一个暴力的想法是构建\(SA\)之后把所有位置按照\(rank\)排序,每次询问相邻的两个\(LCP\)就行了,然后拿\(set\)维护插入的操作. 然而并没有用到串随机的性质. 既然是随机的,那么大力猜一猜他们的\(lcp\)的长度不会很长,大概估计一个\(40\)左右吧. 把询问离线挂在右端点上,从左往…
https://www.luogu.org/problemnew/show/P3732 Anihc国提高社会生产力水平.落实好以人民为中心的发展思想.决定进行供给侧结构性改革. 为了提高供给品质.你调查了某个产业近来n个时期的供求关系平衡情况.每个时期的情况都用0或1中的一个数字来表示.于是这就是—个长度为n的01字符串S.为了更好的了解这一些数据.你需要解决一些询问.我们令data(l,r)表示:在字符串S中.起始位置在[l,r]之间的这些后缀之中,具有最长公共前缀的两个后缀的最长公共前缀的长…
参考:http://blog.csdn.net/di4covery/article/details/73065684 我以为是后缀数组+某某数据结构,结果居然是01trie!!题解说"因为是随机的所以大概不会超过40个~"所以40是咋算的啊我一介非酋真的不能估计-- 好了正解是这样的,先把询问离线按r排序,然后按照每个r的位置把这个后缀的前40个(我比较非就写了50个)放进trie树里,每扫到trie深度为dep的一个节点时,对这个dep记录一个tg代表最后一次更新到这个点的后缀的开始…
题意 题目链接 分析 由于数据随机所以 LCP 不会很长,维护每个位置后 40 个字符构成的01串. 将询问离线维护,以当前右端点为 R 的每个长度的 LCP 的第一个出现位置 f(这个信息显然是单调的),更新就在 trie 上找到路径上每个点最后是谁访问的,然后更新对应层数的 f . 代码 代码链接…
题目 这道题我们其实就是利用了一棵后缀树 由于字符串是随机的,所以这个后缀树的树高是\(log\)的,基于树高的算法是能过的 我们考虑后缀树上的两个节点的\(lca\)就是这两个节点所代表的后缀的\(lcp\) 我们可以把询问按照右端点离线,每次都暴力跳这个在后缀树上暴力跳父亲 我们维护一下后缀树上子树里的最大值,这样我们就可以维护出对于每一种\(lcp\)出现最靠后的位置在哪里了 对于每次询问我们扫一遍这些个\(lcp\)就好了 至于如何建一棵后缀树,自然是把原串反着建一个SAM啊 代码 #i…
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value = None self.children = {} # children is of type {char, Node} self.fre = 0 self.father = None self.fail = None def CMP(a, b): return b.fre - a.fre cla…
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chuxiuhong/smarteditor 数据结构,使用过程截图以及源代码如下: #数据结构 **trie树** trie树相应的介绍点击链接 https://en.wikipedia.org/wiki/Trie trie树在python文件中的类型定义 Node定义 #GUI设计界面 首先,用较大的…
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. #include <iostream> #include <cstdio> using namespace std; typedef struct TrieNode{ int cnt; struct TrieNode *next[26]; }TrieNode; TrieNode memo…
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词(每个单词内包含大小写字母).现在他想要找出某一段连续的单词内字典序最大的单词. 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示单词个数和询问个数. 接下来N行每行包含一个字符串,仅包含大小写字母,长度不超过15,表示一个单词. 再接下来M行每行包含两个整数x.y,表示求从第x到第y…