ST算法_解决RMQ(区间最值)问题

ST算法,处理RMQ区间最大值问题

通过倍增预处理每一个[i,i+2^j-1]上的最大值
状态转移方程是ST[i,j]=max(ST[i,j-1],ST[i+2^(j-1),j-1]

下面是函数模板:

ST预处理函数

void ST_prework(){
	for(int i=1;i<=n;i++) ST[i][0]=arr[i];
	int t=log(n)/log(2)+1;
	for(int j=1;j<t;j++){
    	for(int i=1;i<=n-(1<<j)+1;i++){
        	//由公式ST[i,j]=max(ST[i,j-1],ST[i+2^(j-1),j-1]
        	ST[i][j]=max(ST[i][j-1],ST[i+(1<<(j-1))][j-1]);
    	}
	}
}

查询操作

int ST_query(int l,int r){
	int k=log(r-l+1)/log(2);
	return max(ST[l][k],ST[r-(1<<k)+1][k]);
}

建议练习:
https://www.acwing.com/problem/content/1272/
https://www.acwing.com/problem/content/1273/

上一篇:【云挖矿】如何利用云服务挖Chia(实操)


下一篇:防踩坑必看:Chia挖矿过程中常见问题汇总