ST-RMQ
做一只大熊猫
让优秀成为一种习惯!
展开
-
G - Check Corners HDU - 2888(二维ST表)
思路 分析 二维ST表 维护二维子区间最值 代码 #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <string> #include <queue> #include <map> /* #include <unordered_map&原创 2020-07-23 12:13:47 · 197 阅读 · 0 评论 -
F - Find the hotel HDU - 3193(ST表 + 排序)
思路 题意 给我们 n 个酒店的信息,信息包括两个属性:p价格、d距离,现在让我们选择 那 所有符合的题意的酒店,符合题意指的是:假如我们选择了某个酒店i,在剩下的酒店中 就不能存在某个酒店 p、d同时小于 i的p、d,求这些酒店的数量并把他们 按 酒店的价格p从小到大排序输出(p相同时按d从小到大排序) 分析 我们首先给 n 个酒店 按 酒店的价格p从小到大排序输出(p相同时按d从小到大排序),之后我们 从下标1到下标n遍历这些酒店,当我们遍历的到某个酒店的时候, 我们考虑如果第i个酒原创 2020-07-23 12:11:06 · 147 阅读 · 0 评论 -
C - To the Max POJ - 1050 (子矩阵最大和)
思路 题意 给我们一个n*n的矩阵,让我们在这个矩阵内找到一个和最大子矩阵,输出这个最大和 分析 这题的是让求的 二维子区间 最大和,在将这一题的基础上我们先说一下:一维情况下的最大子段和(子区间和): 举例:给我们一个 n元素的数组 a[], 我们通过下面的代码: 可以以O(n) 的复杂度求出,最大子段和,这样求的速度很快 int f(int n, int a[]) { int mx = 0, b = 0; for_(i, 1, n) { if(b >原创 2020-07-23 11:50:48 · 150 阅读 · 0 评论 -
B - Frequent values POJ - 3368(ST表 / 线段树)
思路 题意 给我们一个有n个元素的序列,这个序列的元素从左到右非严格递增,给我们q次询问,每次询问,某个区间内的,出现次数最多的那个数字 分析 这题用ST表,和预处理 前、后缀数组,注意我们给 st数组的赋初始值是什么,具体思路 在⬇️下面 线段树代码中 线段树代码 #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include &l原创 2020-07-23 11:28:09 · 144 阅读 · 0 评论 -
H - A Magic Lamp HDU - 3183(ST表 + 贪心)
思路 题意 给我们一个 n<1000 位数让我们删除m位,求当我们删除m位之后剩下的数最小可以是多少? 分析 首先我们可以对这一的求解的问题进行一个思维转换,题目让求 删除m位之后得到的数最小, 我们可以转换成从n个数字中选择 n-m位(不改变原来数字顺序),组成的数最小,这个转换的一个好处,避免的对 前导零现象 问题的考虑, 根据贪心可知,在 n-m次的选择步骤中,我们要让每一步选择,都选择当前 选择区间能选择的最小数字(即使最小的数字是0),通过这样的选择之后,这样拼凑出的数字就原创 2020-07-23 11:14:53 · 152 阅读 · 0 评论 -
ST表求解静态RMQ/二维RMQ——模版
RMQRMQRMQ问题 RMQ(Range Minimum Query),范围最小值问题。具体表现为一下一类问题: 给出一个 n 个元素的数组 A1,A2,…,AnA1,A2,…,AnA1,A2,…,An ,求解 min(l,r)min(l,r)min(l,r) : 计算 minAl,Al+1,…,Armin{Al,Al+1,…,Ar}minAl,Al+1,…,Ar RMQRMQRMQ 问题有很多解法,其中较为快捷和简便的是 Tarjan 的 Sparse−TableSparse−TableSparse−T原创 2020-07-20 22:17:45 · 242 阅读 · 0 评论