hdu5443 线段树 长春网赛
#include<stdio.h> #include<string.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 1100 int sum[maxn<<2]; int max(int x,int y) { return x>y?x:y; } void PushUp(int rt) { sum[rt]=max(sum[rt<<1],sum[rt<<1|1]); } void build(int l,int r,int rt) { if(l == r) { scanf("%d",&sum[rt]); return; } int m = (r + l)/2; build(lson); build(rson); PushUp(rt); } void Updata(int p,int v,int l,int r,int rt) { if(l==r) { sum[rt]=v; return ; } int m=(l+r)/2; if(m < p) Updata(p,v,rson); else Updata(p,v,lson); PushUp(rt); } int Query(int L,int R,int l,int r,int rt) { if(L<=l && R>=r) { return sum[rt]; } int ret=-9999999; int m=(l + r)/2; if(m < L) { ret=max(ret,Query(L,R,rson)); } else if(m >= R) { ret=max(ret,Query(L,R,lson)); } else { ret=max(ret,Query(L,R,rson)); ret=max(ret,Query(L,R,lson)); } return ret; } int main() { int n,m,i; char way[10]; int t; scanf("%d",&t); while(t--) { scanf("%d",&n); build(1,n,1); int time; scanf("%d",&time); while(time--) { int a,b; scanf("%d%d",&a,&b); printf("%d\n",Query(a,b,1,n,1)); } } }