题目:区间中最大的数
思路:静态区间最大值,写的线段树。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 10000
struct Node {
int x;
};
int n,m;
Node a[maxn*4+5];
int c[maxn+5];
int P,Q;
int Query(int o,int L,int R) {
if(P<=L&&R<=Q) {
return a[o].x;
}
if(P>R||Q<L) return 0;
int mid=L+(R-L)/2;
int lch=o*2,rch=o*2+1;
return max(Query(lch,L,mid),Query(rch,mid+1,R));
}
void push_up(int o) {
a[o].x=max(a[o*2].x,a[o*2+1].x);
}
void make_tree(int o,int L,int R) {
if(L==R) {
a[o].x=c[L];
return ;
}
int mid=L+(R-L)/2;
int lch=o*2,rch=o*2+1;
make_tree(lch,L,mid),make_tree(rch,mid+1,R);
push_up(o);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",&c[i]);
}
make_tree(1,1,n);
scanf("%d",&m);
while(m--) {
scanf("%d%d",&P,&Q);
P++,Q++;
int ans=Query(1,1,n);
printf("%d\n",ans);
}
return 0;
}