
poj
bestFy
世界上最最最渣的oier.
展开
-
poj2828 Buy Tickets
题面在这里 题目大意: 有一个队列,初始时为空。有nn个人,n<=200000n<=200000,有一个想去的位置和价值,每个人会依次将这个价值插入到它想去的位置上。这nn个人都插入队列后,输出这个队列。做法: 我们维护一个线段树,每个节点表示这个区间内剩下还有几个空位,初始时线段树每个节点值就等于区间长度。 考虑逆序操作。从nn~11枚举,插入时询问线段树左儿子剩下的空位够不够,如果够的就原创 2017-12-08 12:22:53 · 235 阅读 · 0 评论 -
poj3415 Common Substrings
题面在这里题意:求两个字符串中长度不小于k的公共子串个数。做法:即求sigma(两个字符串的后缀的lcp-k+1|lcp>=k)。 首先用一个没有出现过的字符拼接两个串。跑出sa和height.两个后缀的lcp为在它们排名之间的height的最小值。 所以我们可以对于某一个height,求出它作为最小值的一个区间l[i],r[i],然后最后对于所有>=k的heigh原创 2018-01-18 17:35:30 · 291 阅读 · 0 评论 -
poj3261 Milk Patterns
题面在这里题意:在一个串中找出重复出现次数至少为k的最长子串的长度。做法:首先跑出sa。 然后二分答案x,只要找到连续的一段height[i]>=x,如果这段的长度大于等于k-1就可行。 注意是k-1不是k。 因为height计算的是两个相邻排名的后缀的lcp,如果有k个串的最长公共子串都>=x,则只要他们之间的height>=x即可,他们之间只有k-1个height原创 2018-01-18 13:56:32 · 236 阅读 · 0 评论 -
poj3294 Life Forms
题面在这里题意:给你n个串,找出最长的出现在超过n/2个串中的公共子串。做法:首先二分一个长度x,然后问题转化为如何检验是否存在超过n/2个串的公共子串长度为x。 对于公共子串这个问题,马上想到后缀数组,因为height[]数组就可以巧妙地解决这个问题。 首先把所有串用一些不同的没有出现过的字符连接起来。跑这个大串的sa。 把所有后缀按照height分组,把heigh原创 2018-01-18 11:15:26 · 283 阅读 · 0 评论 -
poj1386 Play on Words
题面在这里题意:给n个字符串,两个字符串若头尾字符相同可以连接起来,问你是否可以把n个字符串连接起来。做法:对于一个单词,把它头尾的字符之间连一条有向边,然后问题转化为求这个图是否存在欧拉路径。 一个有向图存在欧拉路径的判断方式:图弱连通所有点的入度都等于出度;或只有两个点的入度不等于出度,且这两个点一个入度-出度=1,另一个出度-入度=1.代码:/原创 2018-01-25 19:17:24 · 262 阅读 · 0 评论 -
poj1743 Musical Theme
题面在这里题意:求n个数相邻两数差组成的数列中,两段不重叠的最长相同子串。做法:首先二分一个答案x,然后将SA[]分组,每一个height[i]>=x连续区间的SA[i]都分为一组。 对于每一个连续区间,这个区间任意两个后缀的lcp都>=x,所以我们找到最大和最小的SA[i],看是否能符合条件即可。代码最下面有一个博客链接,讲得挺详细,初学者可以看一看。 另外还有一原创 2018-01-13 16:35:28 · 243 阅读 · 0 评论 -
poj3691 DNA repair
题面在这里题意:给你N (1 ≤ N ≤ 50)个只由“A”,“G”,“C”,“T”四个字母组成的病毒串(len给你一个文本串(len做法:ac自动机+dp。 将病毒串建立ac自动机,题目要求的即是文本串不能经过任何ac自动机上的单词节点。 f[i][j]表示第i个节点,当前在文本串第j位,最少改变多少个字符。 枚举下一位是什么字母转移。 可以用记搜实现。原创 2018-01-13 15:01:34 · 367 阅读 · 0 评论 -
poj3481 Double Queue(treap)
题面在这里 (vjudge怎么这么不靠谱啊。。以后还是直接用poj算了) (注册了一个号写了一道题Submissions:14===)呐,进入正题。题意:三个操作: 1. 插入一个编号为x,优先级为y的人 2. 返回优先级最高的人的编号 3. 返回优先级最低的人的编号做法:treap模板。(这题我好像也写过splay)大致的想法就是,tree+heap,对原创 2018-01-01 16:05:42 · 372 阅读 · 1 评论 -
poj3481 Double Queue(splay)
题面在这里 题目大意: 有一些人,每个人有一个名字和优先级。初始时队列为空。现在有33种操作:插入一个人;弹出优先级最大的那个人;弹出优先级最小的那个人。做法: 平衡树练习。直接上代码。/************************************************************* Problem: poj 3481 Double Queue Use原创 2017-12-09 18:00:13 · 352 阅读 · 0 评论 -
【Notes】【划分树】poj2104 K-th Number
题面在这里题目大意:给一个长为n的序列,m次询问,每次询问[l, r]内第k大的数是几。 n 用了划分树,简单介绍一下。划分树,顾名思义是将n个数的序列不断划分,根结点就是原序列,左孩子保存父结点所有元素排序后的一半,右孩子也存一半,也就是说排名1 -> mid的存在左边,排名(mid+1) -> r的存在右边,同一结点上每个元素保持原序列中相对的顺序。原创 2017-11-27 20:45:59 · 308 阅读 · 0 评论 -
poj2763 Housewife Wind
题面在这里题目大意:有一棵树,每条边有边权,一个人初始在s点。现在有两种操作,一是修改某条边的边权,二是询问这个人走到x点经过的边权总和,并移动到x点。做法:树剖。线段树维护区间和。(第一次树剖一次过qwq太感动了)/************************************************************* Problem: p原创 2017-12-05 18:13:47 · 1195 阅读 · 0 评论 -
poj3237 Tree
题面在这里题目大意:有一棵树,要求支持树上单点修改,链取反(相反数),询问链上最大边权。做法:额....树剖裸题。维护一个线段树,打tag表示取不取反,然后线段树里要维护最大的和最小的值mx[o]和mi[o],更新的时候就是:swap(mx[o], mi[o]); mx[o] = -mx[o]; mi[o] = -mi[o]。然后先欣赏一下我的艰辛历程emmmm原创 2017-12-04 23:26:15 · 227 阅读 · 0 评论 -
poj2985 The k-th Largest Group
题面在这里 题目大意: 有n个集合,每个集合有一个互不相同的元素。现在有两种操作:合并xx, yy所在的集合;询问第kk大的集合元素个数。做法: 并查集+平衡树。平衡树里维护每个集合的元素个数。/************************************************************* Problem: poj 2985 The k-th Largest原创 2017-12-09 15:53:33 · 244 阅读 · 0 评论 -
poj2892 Tunnel Warfare
题面在这里 题目大意: 有nn个物品排成一行。三种操作:DD xx 表示将第xx个物品摧毁;RR 表示将上一个物品回复;QQ xx 表示查询xx所在连通块的个数。做法: 平衡树中保存摧毁的物品编号。 查询时只需查询xx的前驱prepre后继nxtnxt,然后输出nxt−pre−1nxt-pre-1即可。/****************************************原创 2017-12-09 00:27:01 · 208 阅读 · 0 评论 -
ural1297 Palindrome
题面在这里题意:求一个串最长的回文子串。做法:首先将原串和它的反串用一个没有出现过的字符拼接起来。 跑这个大串的sa。求出height。 在原串中枚举一个中心点x,要知道x往左右两边最多能扩展多少,这个相当于求原串和反串相应后缀的lcp。 于是就可以用height+rmq实现了。 注意要按照长度奇偶分开讨论。代码:/*************************原创 2018-01-18 18:57:02 · 240 阅读 · 0 评论