蒟蒻线段树RE求调!!!
查看原帖
蒟蒻线段树RE求调!!!
494192
ChickenDrinkingMilk楼主2023/1/5 20:30
#include<iostream>
#include<algorithm>
using namespace std;
const int N=5000000;
int n,a[N+5],q;
struct node{
	int l,r,mx,mn;
}tr[4*N+5];
void build(int p,int l,int r){
	tr[p].l=l,tr[p].r=r;
	if (l!=r){
		int mid=(l+r)>>1;
		build(p*2,l,mid);
		build(p*2+1,mid+1,r);
		tr[p].mx=max(tr[p*2].mx,tr[p*2+1].mx),tr[p].mn=min(tr[p*2].mn,tr[p*2+1].mn);
	} else tr[p].mx=a[l],tr[p].mn=a[l];
}
int queryx(int p,int l,int r){
	if (l<=tr[p].l&&tr[p].r>=r) return tr[p].mx;
	int mid=(tr[p].l+tr[p].r)>>1;
	return max((l<=mid?queryx(p*2,l,r):0),(r>mid?queryx(p*2+1,l,r):0));
}
int queryn(int p,int l,int r){
	if (l<=tr[p].l&&tr[p].r>=r) return tr[p].mn;
	int mid=(tr[p].l+tr[p].r)>>1;
	return min((l<=mid?queryn(p*2,l,r):0x7fffffff),(r>mid?queryn(p*2+1,l,r):0x7fffffff));
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>q;
	for (int i=1;i<=n;i++) cin>>a[i];
	build(1,1,n);
	while (q--){
		int l,r;
		cin>>l>>r;
		cout<<queryx(1,l,r)-queryn(1,l,r)<<'\n';
	}
	return 0;
}

显示数组越界,不知道怎么回事。。。

2023/1/5 20:30
加载中...