蒟蒻分块70WA求助
查看原帖
蒟蒻分块70WA求助
494192
ChickenDrinkingMilk楼主2023/3/17 22:34
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int N=100000;
int n,m,a[N+5],mx[N+5],mn[N+5],bl;
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for (int i=0;i<n;i++) cin>>a[i];
	bl=(int)sqrt(n);
	memset(mn,0x7f,sizeof(mn));
	for (int i=0;i<bl;i++){
		for (int j=i*bl;j<(i+1)*bl;j++)
			mx[i]=max(mx[i],a[j]),mn[i]=min(mn[i],a[j]);
	}
	while (m--){
		int l,r,L,R,ans=0,ans1=0x7fffffff;
		cin>>l>>r; l--,r--;
		L=l/bl,R=r/bl;
		if (L==R){
			for (int i=l;i<=r;i++) ans=max(ans,a[i]),ans1=min(ans1,a[i]);
		} else {
			for (int i=L+1;i<R;i++) ans=max(ans,mx[i]),ans1=min(ans1,mn[i]);
			for (int i=l;i<(L+1)*bl;i++) ans=max(ans,a[i]),ans1=min(ans1,a[i]);
			for (int i=R*bl;i<=r;i++) ans=max(ans,a[i]),ans1=min(ans1,a[i]);
		}
//		cout<<ans<<' '<<ans1<<' ';
		cout<<ans-ans1<<'\n';
	}
}
2023/3/17 22:34
加载中...