记录编号 |
304293 |
评测结果 |
AAAAAAAAAA |
题目名称 |
延绵的山峰 |
最终得分 |
100 |
用户昵称 |
Twist Fate |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.340 s |
提交时间 |
2016-09-07 22:10:54 |
内存使用 |
80.31 MiB |
显示代码纯文本
//手打线段树
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF=1000000000;
int minv[30000005];
int ql,qr;
int p,v;
void add(int o,int l,int r){
int m=l+(r-l)/2;
if(l==r)minv[o]=v;
else {
if(p<=m) add(2*o,l,m);
else add(2*o+1,m+1,r);
minv[o]=max(minv[2*o],minv[2*o+1]);
}
}
int search(int o,int l,int r){
int m=l+(r-l)/2,ans=0;
if(ql<=l&&r<=qr)return minv[o];
if(ql<=m)ans=max(ans,search(2*o,l,m));
if(qr>m)ans=max(ans,search(2*o+1,m+1,r));
return ans;
}
int main(){
freopen("climb.in","r",stdin);
freopen("climb.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=0;i<=n;i++){
scanf("%d",&v);
p=i;
add(1,0,n);
}
int q;
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d",&ql,&qr);
int k=search(1,0,n);
printf("%d\n",k);
}
return 0;
}