求助,1AC,1WA,其他全RE
查看原帖
求助,1AC,1WA,其他全RE
852827
Mr_yeh楼主2024/3/14 20:27
#include<bits/stdc++.h>
using namespace std;
const int N=(int)5e4+10;
int h[N],f[N][30][2],n,q;
void ST_create(){
	for(int i=1;i<=n;i++){
		f[i][0][0]=f[i][0][1]=h[i];
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i<=n-(1<<j)+1;i++){
			f[i][j][0]=max(f[i][j-1][0],f[i+1<<(j-1)][j-1][0]);
			f[i][j][1]=min(f[i][j-1][1],f[i+1<<(j-1)][j-1][1]);
		}
	}
}
int ST_query(int a,int b){
	int k=log2(b-a+1);
	return max(f[a][k][0],f[b-(1<<k)+1][k][0])-min(f[a][k][1],f[b-(1<<k)+1][k][1]);
}
int main(){
	for(int i=1;i<=N-10;i++){
		for(int j=0;j<=29;j++){
			f[i][j][1]=0x3f3f3f3f;
		}
	}
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++) scanf("%d",&h[i]);
	ST_create();
	while(q--){
		int a,b;
		scanf("%d%d",&a,&b);
		printf("%d\n",ST_query(a,b));
	}
	return 0;
}

2024/3/14 20:27
加载中...