本文共 2263 字,大约阅读时间需要 7 分钟。
3110011 151 2 3 4 551 21 32 43 43 531 999999 141 11 22 33 3
1002344519999999999991
#include#include #include #include #include #include using namespace std;const int N=1000*4;struct Node{ int l,r,big;}node[N];void Init(int now,int le,int ri){ if(le==ri){ scanf("%d",&node[now].big); node[now].l=le; node[now].r=ri; // printf("%d %d %d %d\n",now,node[now].l,node[now].r,node[now].big); return; } int mid=(le+ri)>>1; int ne=now<<1; node[now].l=le; node[now].r=ri; Init(ne,le,mid); Init(ne+1,mid+1,ri); node[now].big=max(node[ne].big,node[ne+1].big); //printf("%d %d %d %d\n",now,node[now].l,node[now].r,node[now].big);}int find(int now,int a,int b){ int mid=(node[now].l+node[now].r)>>1; int ne=now<<1; if(a==node[now].l&&b==node[now].r) return node[now].big; else if(b<=mid) return find(ne,a,b); else if(a>mid) return find(ne+1,a,b); else return max(find(ne,a,mid),find(ne+1,mid+1,b));}int main(){ int t,n,i,j,a,b; scanf("%d",&t); while(t--){ scanf("%d",&n); Init(1,1,n); scanf("%d",&i); while(i--){ scanf("%d%d",&a,&b); printf("%d\n",find(1,a,b)); } } return 0;}
转载地址:http://eymvi.baihongyu.com/