
ST表
文章平均质量分 76
stormjing7
这个作者很懒,什么都没留下…
展开
-
ST表算法总结
RMQ问题RMQ (Range Minimum/Maximum Query):对于长度为n的数组A,回答若干询问RMQ(A,i,j)(i,j<=n-1),返回数组A中下标在i,j范围内的最小(大)值,即求解区间最值求解方法线段树 预处理O(n) ~ 查询O(log(n)) ST(Sparse Table)表(本质dp)预处理O(nlog(n)) ~ 查询O(1),不支持在线修...原创 2019-04-26 12:01:02 · 497 阅读 · 0 评论 -
51nod 2599 最近公共祖先(LCA) (ST表求LCA模板)
51nod 2599 最近公共祖先(LCA)题目裸 LCA,给一颗 n 个节点, n-1 条边的树,m次查询求任意两点LCA。算法介绍求 LCALCALCA 可以用离线 TarjianTarjianTarjian算法,算法复杂度O(n + m)。还有一种离线的算法,预处理O(nlogn),在线查询O(1)。就是用STSTST表求LCA。首先介绍欧拉遍历序,给一颗树,从根节点遍历:欧...原创 2019-06-26 16:25:11 · 719 阅读 · 0 评论 -
HDU - 3183 A Magic Lamp (RMQ + 贪心)
HDU - 3183 A Magic Lamp题目给一个最多 1000 位的整数,去掉 n 个数位,使剩下的数字尽可能小。分析去掉 n 个数位之后剩下的数位是固定的,之后对于高位贪心的尽可能取最小值即可。可以用RMQ预先处理最小值的下标。不过如果值相同,优先级左边的要比右边的高。剩下的数位有可能比较大,按字符串输出即可。#include <bits/stdc++.h>#de...原创 2019-07-09 17:05:34 · 197 阅读 · 0 评论 -
HDU - 3486 Interviewe (RMQ + 枚举)
HDU - 3486 Interviewe题目给你 n 个数,让你分成 m 组,每组长度 n / m,剩下的人不要。每组最大值之和要大于给出的 k,问最小的 m 是多少。分析看到分组取最值,很明显 RMQ 问题,这里最小的 m 肯定是 1了,那么就从 1 开始枚举,只要遇到满足条件的就直接输出。注意要加个剪枝:枚举 m 的时候有可能两个 m值对应的分组长度是相同的。这时就不用再次计算了,直...原创 2019-07-10 20:53:56 · 291 阅读 · 0 评论 -
POJ - 3368 Frequent values (RMQ + 游程编码)
POJ - 3368 Frequent valuesUVA - 11235 Frequent values题目题目给出一个长度为 n 非递减序列,q 次询问区间最长连续相等序列长度。(1<=n,q<=1e51 <= n,q <= 1e51<=n,q<=1e5)分析区间问题,线段树肯定可以做,不过应该有点麻烦。可以看出题...原创 2019-07-12 12:03:36 · 195 阅读 · 0 评论 -
codeforce Gym - 101061E (ST 表)
codeforce Gym - 101061E题目给一个最大 1000 位的数 n,有可能有前导零,再给一个整数 m,问从 n 中删去 m 位数字,能得到最大最小的数是多少。分析这个题跟 hdu 3486 差不多,只不过要多求一个最小值,还要考虑前导零。分开讨论,两种情况最大最小,先说最小。删去数字比非前导零部分长————直接删去所有非零部分删去数字没非前导零部分长————从非零部...原创 2019-07-22 17:11:02 · 238 阅读 · 0 评论