RMQ
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 3784: 树上的路径 点分治+RMQ+堆
题意 给定一个N个结点的树,结点用正整数1..N编号。每条边有一个正整数权值。用d(a,b)表示从结点a到结点b路边上经过边的权值。其中要求a < b.将这n*(n-1)/2个距离从大到小排序,输出前M个距离值。 N<=50000,M<=Min(300000,n*(n-1) /2 ) 分析 这题有一种做法是先二分答案点分治,求出距离值的下界后再点分治一次把全部距离值找到。...原创 2018-03-02 07:33:43 · 330 阅读 · 0 评论 -
AtCoder Regular Contest 080 E - Young Maids 贪心+堆+RMQ
题意 给出一个排列,要求按如下方式构造一个新排列,使得新排列的字典序尽量小。 每次可以在原排列中选择两个相邻的数,将这两个数在原排列中删掉并按照原来的相对顺序放在新排列的最前面。 n<=200000 分析 由于要字典序最小,我们可以倒着贪心。 首先找到下标奇偶性不同且字典序最小的两个数(a[x],a[y]),那么a[x]和a[y]就会作为新排列的开头,然后将序列拆分成三个区间...原创 2018-02-18 14:45:14 · 218 阅读 · 0 评论 -
bzoj 3230: 相似子串 后缀数组+rmq+二分
题意 N≤100000,Q≤100000,字符串只由小写字母’a’~’z’组成分析一开始是想写sam的,然后发现貌似sam我只会两个log而且比sa更难写,于是还是写了sa。 这题只要把sa求出来之后根据height数组求出每个后缀有多少个本质不同的子串,然后在上面二分即可。代码#include<iostream> #include<cstdio> #include<cstdlib> #incl原创 2017-12-21 19:06:13 · 265 阅读 · 0 评论 -
Codeforces 875D High Cry rmq+分治
题意给出一个长度为n的序列a[],问你有多少个区间[l,r]满足a[l] or a[l+1] or … or a[r]>max(a[l],a[l+1],…,a[r])。 n<=200000,a[i]<=10^9分析假设我们要处理一个区间[l,r]内有多少满足题目条件的区间,我们可以先找到这个区间的最大值,设为mid。只要我们找到mid左边的第一个数,使得这个数or上a[mid]>a[mid],设其原创 2017-10-17 20:23:49 · 589 阅读 · 0 评论 -
bzoj 3172: [Tjoi2013]单词 后缀数组+rmq+二分
题意某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。每个单词由小写字母组成,N<=200,文章长度不超过10^6分析AC自动机模板,但由于很久没打sa了想要复习一下,于是就用了sa+rmq+二分的方法来做。代码#include<iostream> #include<cstdio> #include<cstdlib> #includ原创 2017-02-20 19:37:07 · 374 阅读 · 0 评论 -
bzoj 4540: [Hnoi2016]序列 莫队算法+rmq
题意给出一个长度为n的序列和q个询问,没个询问l r表示求[l,r]中每一个子序列的最小值的和。 n,q<=100000分析正解是非常玄学的线段树,反正我是不会了,不过据说跑的还没有莫队快……首先很容易想到离线做,但是莫队要怎么更新呢?总不能O(n)扫一遍吧。 我们假设现在莫队处理到的区间为[l,r],那么我要将其变为[l,r-1],那么就是要减去所有区间[i,r](l< =i<=r)的最小值。原创 2016-12-05 21:46:27 · 404 阅读 · 0 评论 -
bzoj 5073: [Lydsy1710月赛]小A的咒语 后缀数组+RMQ+贪心+dp
题意 给出两个字符串A,B和一个常数x,问能否从A中取不超过x段出来,将其按原来顺序拼接后可以组成B。 n,m≤105,x≤100n,m≤105,x≤100n,m\le10^5,x\le100 分析 我们可以设f[i,j]表示A的前i个字符选了j段出来能拼成的B的最长前缀是多少。 用后缀数组+RMQ即可做到O(1)O(1)O(1)转移。 代码 #include<iost...原创 2018-04-26 16:04:45 · 260 阅读 · 0 评论