#include<bits/stdc++.h>
using namespace std;
int n,m;
int s[400005];
void build(int p,int l,int r){
if(l==r){
cin>>s[p];
return ;
}
build(2*p,l,(l+r)/2);
build(2*p+1,(l+r)/2+1,r);
s[p]=max(s[2*p],s[2*p+1]);
}
int query(int p,int l,int r,int x,int y){
if(r<x && l>y)
return 0;
if(x<=l && y>=r)
return s[p];
if(l==r){
return 0;
}
return max(query(2*p,l,(l+r)/2,x,y),query(2*p+1,(l+r)/2+1,r,x,y));
}
int main(){
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
cout<<query(1,1,n,x,y)<<"\n";
}
return 0;
}
这是某站外提的代码
问询问时的区间最大值
但是在query里面,l==r的情况却能越过前两个判断,实在不知道为何会如此。
求救大佬qaq