用的线段树,1WA2AC10RE。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005];
struct Tree{int M,l,r;};Tree tr[222000];
int build(int l,int r,int in){if(l==r){tr[in].M=a[l];tr[in].l=l;tr[in].r=r;
return tr[in].M;}
int mid=(l+r)/2;
tr[in].M=max(build(l,mid,in*2),build(mid+1,r,in*2+1));
tr[in].l=l;tr[in].r=r;
return tr[in].M;}
int vis(int l,int r,int in){if((l==tr[in].l && r==tr[in].r) || l==r) return tr[in].M;
int Ma=0;
if(l<=tr[in*2].r)
Ma=max(Ma,vis(l,tr[in*2].r,in*2));
if(r>=tr[in*2+1].l)
Ma=max(Ma,vis(tr[in*2+1].l,r,in*2+1));
return Ma;}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
tr[1].M=build(1,n,1);
while(m--){
int l,r;
cin>>l>>r;
cout<<vis(l,r,1)<<endl;}
return 0;}