ST表总结+例题

解决RMQ(查询区间最大/最小值问题)
复杂度:O(nlogn)
f[i][st]表示将作为区间左界,长度为2^st的区间的最大值。
st的最大值为 log2(n)
查询上会比线段树快
例题:
1.P3865 【模板】ST表

#include
#include
#include
#include
#include
#include
using namespace std;
int n,q;
int f[100001][22],a[100001];
inline int gi(){
    int f=1,sum=0;char c=getchar();
    if(c>'9' || c<'0'){if(c=='-')f=-1;c=getchar();}
    while(c>='0' && c<='9'){sum=(sum<<3)+(sum<<1)+c-'0';c=getchar();}
    return f*sum;
}
void st(){
	int k=log(n)/log(2);
	for(register int i=1;i<=n;i++){
		f[i][0]=a[i];
	}
	for(register int j=1;j<=k;j++)
		for(register int i=1;i<=n-(1<

你可能感兴趣的:(RMQ)