RMQ问题就是区间最小值问题,这是一个非常经典的题,
由他引申出来的也是不计其数最多的是给出一个区间,然后输入多组区间端点,求输入区间的最小值。
每次用循环来计算一个最小值显然不够快,怎么办呢?
实践中最常用的是Tarjan的 Sparse-Table算法,它的预处理时间是O(nlogn),但是查询只需要O(1),而且常数很小。
它的思想很简单,就是递推+二分的思想。我们先定义一个二维数组...
分类:
其他好文 时间:
2015-03-01 18:35:50
阅读次数:
139
原理讲解:http://dongxicheng.org/structure/lca-rmq/
在线算法模板:
/**
LCA在线算法O(nlogn)
主函数调用:
init();
tot=0,dir[1]=0;
dfs(1,1);
ST(2*n-1);
int lca=LCA(u,v);
*/
#include
#include
#include
#include
#inclu...
分类:
编程语言 时间:
2015-03-01 18:33:50
阅读次数:
168
Language:
Default
Balanced Lineup
Time Limit: 5000MS
Memory Limit: 65536K
Total Submissions: 36833
Accepted: 17252
Case Time Limit: 2000MS
Description
For th...
分类:
其他好文 时间:
2015-02-26 13:30:05
阅读次数:
127
RMQ:(区间最值问题)
本质上是动态规划,用d(i, j) 表示 从 i 开始的长度为 2^j 的一段元素的最小值,则可以用递推的方法计算d(i, j) : d(i, j) = min{ d(i, j-1), d(i + 2^(j-1), j-1)}
由于2^j
#include
#include
#include
#include
#include
#include
#in...
分类:
其他好文 时间:
2015-02-25 14:15:39
阅读次数:
144
Balanced Lineup
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 36813 Accepted: 17237
Case Time Limit: 2000MS
DescriptionFor the daily milking, Farmer John’s N cows (1 ≤ N ≤...
分类:
编程语言 时间:
2015-02-22 21:58:46
阅读次数:
188
范围最小值问题(Range Minimum Query)
给出一个n个元素的数组,设计数据结构使得支持查询操作Query(L,R) 计算[L,R]中最小值
Tarjan的Sparse-Table算法预处理时间为O(nlogn) 查询只需要O(1)而且常数很小。假设dp[i][j]表示从第i个数开始的2^j个数的最小值。
有下列公式:dp[i][j] = min(dp[i,j-1],dp[i+2...
分类:
编程语言 时间:
2015-02-22 21:57:56
阅读次数:
200
树上任意两点的最近祖先,必定就是这两个节点的最短路径上深度最小的那个点。例如:下图中,节点7和5,其最短路径为7--4--1--5, 这条路径上深度最小的点为节点1,其深度为1.节点1即为节点7和5的LCA。因此,要找到任意两个节点的LCA,只需要先找到上述最短路径,再找到最短路径中深度最小的点。而...
分类:
编程语言 时间:
2015-02-21 20:59:24
阅读次数:
949
士兵杀敌(二)时间限制:1000ms | 内存限制:65535KB难度:5描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问...
分类:
其他好文 时间:
2015-02-20 15:13:20
阅读次数:
122