【算法模板】 RMQ问题,使用Sparse-Table,手写留念~

额,大一暑假写的RMQ,还是比较干净的,翻出来存起来以后备用。

 

 

#include "bits/stdc++.h"
using namespace std;
#define inf 10009
#define INF 999999999
//Sparse-Table 学习手敲:求区间最小值,nlogn预处理,1查询,不可动态维护
//ST是一个打表的递推式 ,用2的k次来拓展
//d(i,j)表示i开始的长度为2^j的最小值,j->0,i随意,此处也为0
//d(i,j+1)=min( d(i,j),d(i+2^j,j) )  此列由前一列某两行推出
//方便程序的书写,用 d(i,j)=min( d(i,j-1),d(i+2^(j-1),j-1) )

int a[inf],d[inf][100];
int n;
void init_d()   //预处理nlogn,计算d数组
{
    int i,j;
    for(i=0;i

 

你可能感兴趣的:(常用算法模板)