很基础啊~
#includeusing namespace std;typedef long long LL;const int INF=-0x3f3f3f3f;const int N=1e4+10;struct asd{ int left; int right; int w;};asd q[N*4];void Build(int num,int L,int R){ q[num].left=L; q[num].right=R; if(L==R) { scanf("%d",&q[num].w); return; } Build(2*num,L,(L+R)/2); Build(2*num+1,(L+R)/2+1,R); q[num].w=max(q[2*num].w,q[2*num+1].w);}int query(int num,int s,int t){ if(s<=q[num].left&&t>=q[num].right) return q[num].w; if(q[num].right==q[num].left) return q[num].w; int mid=(s+t)/2; if(mid>=t) return query(2*num,s,t); else if(mid =q[num].right) return q[num].w; int mid=(q[num].left+q[num].right)/2; if(mid>=t) return get_maxa(2*num,s,t); else if(mid