站外题求调(小号玄关)
  • 板块灌水区
  • 楼主shawn0618
  • 当前回复6
  • 已保存回复6
  • 发布时间2025/2/6 22:15
  • 上次更新2025/2/7 10:48:17
查看原帖
站外题求调(小号玄关)
374443
shawn0618楼主2025/2/6 22:15

wa

#include <bits/stdc++.h>
using namespace std;

int n,q,r,l,a[100010],mx[1048576][20],mi[1048576][20];
void stmx(){
	for (int i=1;i<=18;i++)  mx[i][0]=a[i];
	for (int j=1;(1<<j)<=n;j++){
		for (int i=1;i+(1<<j)-1<=n;i++){
			mx[i][j]=max(mx[i][j-1],mx[i+(1<<j-1)][j-1]);
		}
	}
}
void stmi(){
	for (int i=1;i<=18;i++)  mi[i][0]=a[i];
	for (int j=1;(1<<j)<=n;j++){
		for (int i=1;i+(1<<j)-1<=n;i++){
			mi[i][j]=min(mi[i][j-1],mi[i+(1<<j-1)][j-1]);
		}
	}
}
int get_answer(){
	int k=(int)log2(r-l+1);
	return max(mx[l][k],mx[r-(1<<k)+1][k])-min(mi[l][k],mi[r-(1<<k)+1][k]);
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q;
	for (int i=1;i<=n;i++)  cin>>a[i];
	stmx();
	stmi();
	while (q--){
		cin>>l>>r;
		cout<<get_answer()<<"\n";
	}
	return 0;
} 
2025/2/6 22:15
加载中...