1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include<bits/stdc++.h> #define root 1,n,1 #define lson(x) x<<1 #define rson(x) x<<1|1 #define lroot l,mid,lson(p) #define rroot mid+1,r,rson(p) using namespace std; const int maxn = 1e3+10; const int inf =0x7fffffff; int tree[(maxn<<2)+10]; int a[maxn]; int t,n,q,l,r; void push_up(int p) { tree[p] = max(tree[lson(p)],tree[rson(p)]); return ; } void build_tree(int l,int r,int p) { if(l==r) { tree[p] = a[l]; return ; } int mid = l + ((r-l)>>1); build_tree(lroot); build_tree(rroot); push_up(p); } int query(int x,int y,int l,int r,int p) { int res = -inf; if(x<=l&&y>=r) { return tree[p]; } int mid = l+((r-l)>>1); if(x<=mid) res = max(res,query(x,y,lroot)); if(y>mid) res = max(res,query(x,y,rroot)); return res; }
int main() { scanf(" %d",&t); while(t--) { scanf(" %d",&n); for(int i=1;i<=n;i++) scanf(" %d",&a[i]); build_tree(root); scanf(" %d",&q); for(int i=1;i<=q;i++) { scanf("%d %d",&l,&r); printf("%d\n",query(l,r,root)); } }
}
|