RMQ
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
HDU 5452 LCA
点击打开链接题意:给一个树和树上的分支组成的图,问我当且仅当删除一条树上的边,最少再删除几条边使得图不连通思路:我写了两个做法,第一种是不加优化的十分暴力的LCA,也就是裸的,因为这道题目的数据说很水,这样的复杂度也可以,O(n*m),n为20000,m为200000,明明是超时好不好,这个做法也简单易懂,在这个树上,我们加了一条边u->v,那么u与v的最近公共祖先为fa,那么u->f原创 2016-05-25 17:42:46 · 3312 阅读 · 0 评论 -
HDU 5289 RMQ+尺取
点击打开链接题意:给一个数字序列然后问你有多少个区间的最大值与最小值的差小于k,输出思路:对于最大值与最小值的差我们直接用RMQ的ST可以快速求得,然后求当前的i到后面哪里是都可以的,这个与尺取的思想如出一辙,直接求出来就行了,输出注意用long long 就行了,没什么难的#include #include #include #include #include using na原创 2016-07-01 16:24:59 · 553 阅读 · 0 评论 -
HDU 3486 RMQ+二分
点击打开链接题意:n个人,分成m组,多的人就不要了,每组的人都是顺序的,每组选出一个分最高的人,问你最少需要多少人他们的和>k思路:因为要人数最少,直接想到了二分去求解,然后查询区间的最大值可以用RMQ直接快速查询,但是过了之后看讨论发现二分的是错的,好心人的数据是这样的10 15001 1 1 1 1000 1000 1 1 1 1明显分成两组两个人就可以了,但是我的AC代码原创 2016-06-15 15:34:46 · 753 阅读 · 0 评论 -
HDU 4622 后缀数组+RMQ
点击打开链接题意:给一个字符串,有q次询问,为你从第L个到第R个字符组成的不同的子串的数量思路:做过好多这种提问的了,减去的数量就是lcp[i]的值,不过这个是一个区间内的操作,正解是后缀自动机,然而还没学~~~,发现对于n*q*log应该没什么问题,就写了写,对于询问的这个区间,我一开始写的是跑sa数组,如果sa[i]在L和R区间内,那么加进去,与下一个在这个区间的sa进行RMQ查询最长原创 2016-06-12 19:50:12 · 1864 阅读 · 0 评论 -
HDU 4836 LCA转RMQ
点击打开链接题意:中文思路:如果没有多次询问的话,就可以直接用简单的DFS与LCA就可以完成,然而却多加了个变换根的操作,那么怎么办,与刚刚写的那道点这里类似,都是可以变根的,建议先写那道再写这个,思想都是一样的,那么这道题我们也是以1为根先进行LCA与DFS,然后每次的根与询问就是那道题的换根的部分,这不太好说只能自己理解了#include #include #include #i原创 2016-06-27 18:21:18 · 982 阅读 · 0 评论 -
HDU 3078 LCA转RMQ
点击打开链接题意:给一个树和每个点的权值,然后m询问a b c,若a为0,则将b点的权值改为c,否则问你的是从b走到c的所有权值中的第a大的数,若不足a个输出那个思路:就是用LCA转RMQ就可以了,每次的询问就是直接找到它们的最近公共祖先,然后两个点都向上找到最近公共祖先,沿途的所有的点全部记录下来,最后排个序输出第K大就行了#include #include #include #i原创 2016-06-26 19:15:10 · 1794 阅读 · 0 评论 -
POJ 3693 后缀数组+RMQ
点击打开链接题意:问连续重复部分最多的串是什么,不能重叠,且我们要字典序最小的串如xbcabcab,有bcabca重复次数为2,cabcab重复次数也为2,那么要前边那个思路:以前写过一个类似的,SPOJ 687,这个只是求连续重复部分最多的串的次数,并不需要将按字典序最小串输出,那么我们可以用到SPOJ687的代码,用它我们可以求出那个重复的次数和满足这个次数的串的长度,那么就只差找到字原创 2016-05-16 16:55:23 · 3129 阅读 · 0 评论 -
HDU 2874 LCA转RMQ+并查集
点击打开链接题意:问两个城市是否相连,不相连输出Not connected,否则输出两个城市间的最短距离思路:用并查集判断两个城市的连通性,如果联通则做法和LCA一样,但是注意的一点是地图不连通的话,我们要将所有点都建起来,就要加一个模拟的点,将所有图串起来,很好处理的,看一下就会了#include #include #include #include #include #inc原创 2016-05-02 20:25:59 · 3912 阅读 · 0 评论 -
HDU 2586 LCA转RMQ
点击打开链接题意:就是问两个节点间的距离思路:又切了一道模版水题,不解释了,看不懂变量含义的可以看我写的这篇,解释的比较详细ZOJ 3195#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3原创 2016-05-02 20:00:25 · 4108 阅读 · 0 评论 -
ZOJ 3195 LCA转RMQ
点击打开链接题意:输入n,接下来n-1行,每行a,b,c代表a与b有一条权值为c的边,双向边,m次询问,问最短的距离使a,b,c可以联通思路:LCA的模版题,没什么好说的,看理论的话网上好多本弱就不说了,代码有注释,有助于理解#include #include #include #include #include #include using namespace std;ty原创 2016-05-02 19:37:03 · 3962 阅读 · 0 评论 -
POJ 3264 RMQ—ST
点击打开链接题意:给出n个数的数列,m次询问,每次询问输出a~b的最大值与最小值之差思路:用RMQ预处理,查询为O(1)的复杂度,很好的模版练习......,看的这篇博客学习的这一篇#include #include #include #include #include using namespace std;typedef long long ll;const int in原创 2016-05-02 15:25:18 · 3268 阅读 · 0 评论 -
HDU 5875 RMQ-ST
点击打开链接题意:给n个数,然后m个询问,询问是L R,问从L开始一直向后取余的结果思路:比赛的时候就有个想法,就是因为每个数取余的话只有比它小的才有影响,那么我们就找到比当前位置小的那个数的位置就可以了,中间略过的元素是没有影响的,然后因为一个数取余后结果至多变成一半,所以10的9次方的数最大的复杂度就是log10的9次方,然后找位置的话需要用二分,所以总的复杂度就是m*logn*log原创 2016-10-04 11:18:08 · 396 阅读 · 0 评论