记录编号 |
96881 |
评测结果 |
AAAAAAAAAA |
题目名称 |
延绵的山峰 |
最终得分 |
100 |
用户昵称 |
OI永别 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.123 s |
提交时间 |
2014-04-15 21:30:00 |
内存使用 |
8.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#define max(x,y) x>y?x:y
using namespace std;
int n,q,m,d[1<<21];
inline int getint(){
char ch;
int x = 0;
while (!isdigit(ch = getchar()));
x = ch - 48;
while (isdigit(ch = getchar())) x = x * 10 + ch - 48;
return x;
}
int main(){
freopen("climb.in","r",stdin);
freopen("climb.out","w",stdout);
n = getint();n++;
for(m=1;m+2<=n;m=m*2+1);m++;
for(int i=1;i<=n;i++)
d[m + i] = getint();
for(int i=m-1;i>0;i--)
d[i]=max(d[i<<1],d[(i<<1)+1]);
q = getint();
int x,y,A;
while(q--){
x = getint(); y = getint();
for(x+=m,y+=m+2,A=0;x^y^1;x>>=1,y>>=1){
if((x&1)==0) A=max(A,d[x+1]);
if((y&1)==1) A=max(A,d[y-1]);
} printf("%d\n",A);
}
return 0;
}