0分求助
查看原帖
0分求助
1180231
H_dream楼主2024/4/13 15:01
#include<bits/stdc++.h>
using namespace std;
const int N=1e4*5, M=log2(N)+1;
int n,q;
int a[N][M],b[N][M];
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i][0]);
		b[i][0]=a[i][0];
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)<=n;i++){
			a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
			b[i][j]=min(a[i][j-1],a[i+(1<<(j-1))][j-1]);
		}
	}
	 while(q--){
	 	int x,y; scanf("%d%d",&x,&y);
	 	int k=(int)(log(y-x+1)/log(2));
	 	int xx=max(a[x][k],a[y-(1<<k)+1][k]);
	 	int yy=min(b[x][k],b[y-(1<<k)+1][k]);
	 	//cout<<xx<<' '<<yy<<' ';
	 	printf("%d\n",xx-yy);
	 }
	return 0;
}
2024/4/13 15:01
加载中...