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