RMQ(模板 ST 区间最值,区间频繁次数)

PS:

介绍:http://blog.csdn.net/liang5630/article/details/7917702


RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决。


1、求区间的最大值和最小值!


代码如下:

#include 
#include 
#include 
#include 
using namespace std;
const int MAXN = 100117;
int n,query;
int num[MAXN];

int F_Min[MAXN][20],F_Max[MAXN][20];

void Init()
{
    for(int i = 1; i <= n; i++)
    {
        F_Min[i][0] = F_Max[i][0] = num[i];
    }

    for(int i = 1; (1<


2、求区间内出现次数最多的数字出现的次数!

代码如下:

#include 
#include 
#include 
using namespace std;

const int maxn = 100017;
int num[maxn], f[maxn], MAX[maxn][20];
int n;
int max(int a,int b)
{
    return a>b ? a:b;
}
int rmq_max(int l,int r)
{
    if(l > r)
        return 0;
    int k = log((double)(r-l+1))/log(2.0);
    return max(MAX[l][k],MAX[r-(1<

你可能感兴趣的:(LCA,&,RMQ,模板篇)