记录编号 |
500342 |
评测结果 |
AAAAAAAAAA |
题目名称 |
延绵的山峰 |
最终得分 |
100 |
用户昵称 |
雨季 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.215 s |
提交时间 |
2018-07-11 21:01:01 |
内存使用 |
30.83 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
#define N 1000005
#define lch (o<<1)
#define rch (o<<1|1)
#define mid ((l+r)>>1)
int n;
int mav[N<<2],a[N<<2];
void build(int o,int l,int r) {
if(l==r) {
// scanf("%d",&mav[o]);
mav[o]=a[l];
return;
}
build(lch,l,mid);
build(rch,mid+1,r);
mav[o]=max(mav[lch],mav[rch]);
}
int query(int o,int l,int r,int L,int R) {
if(L==l&&r==R) return mav[o];
if(R<=mid) return query(lch,l,mid,L,R);
else if(L>mid) return query(rch,mid+1,r,L,R);
else return max(query(lch,l,mid,L,mid),query(rch,mid+1,r,mid+1,R));
}
int main()
{
freopen("climb.in","r",stdin);
freopen("climb.out","w",stdout);
scanf("%d",&n);n++;
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
build(1,1,n);
int T,l,r;
scanf("%d",&T);
while(T--) {
scanf("%d%d",&l,&r),l++,r++;
printf("%d\n",query(1,1,n,l,r));
}
return 0;
}
/*
10
0
1
2
3
2
3
4
3
2
1
0
5
0 10
2 4
3 7
7 9
8 8
*/