记录编号 |
398271 |
评测结果 |
AAAAAAAAAA |
题目名称 |
延绵的山峰 |
最终得分 |
100 |
用户昵称 |
TARDIS |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.302 s |
提交时间 |
2017-04-21 20:54:15 |
内存使用 |
114.77 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#define coder goodboy
using namespace std;
typedef long long LL;typedef unsigned long long ULL;
inline int max(int a, int b) { return a<b?b:a; }
FILE *fin,*fout;
const int maxn=10001000;
int n,m,l,r,maxv[2*maxn+3],h[maxn];
void buildtree(int o,int l,int r){
if (l==r){
maxv[o]=h[r];
return;
}
else{
int mid=l+(r-l)/2;
buildtree(o*2,l,mid);
buildtree(o*2+1,mid+1,r);
maxv[o]=max(maxv[o*2],maxv[o*2+1]);
}
}
int query(int o,int L,int R){
if (l<=L&&R<=r){
return maxv[o];
}
int mid=L+(R-L)/2;int ans=0;
if (R<l||L>r){
return 0;
}
if (mid>=l) ans=max(ans,query(o*2,L,mid));
if (mid<r) ans=max(ans,query(o*2+1,mid+1,R));
return ans;
}
void in(){
fin=fopen("climb.in","r");
fout=fopen("climb.out","w");
fscanf(fin,"%d",&n);
//memset(maxv,-1,sizeof(maxv));
for (int i=1;i<=n+1;i++){
fscanf(fin,"%d",&h[i]);
}
buildtree(1,1,n+1);
}
void deal(){
fscanf(fin,"%d",&m);
for (int i=1;i<=m;i++){
fscanf(fin,"%d%d",&l,&r);l++;r++;
fprintf(fout,"%d\n",query(1,1,n+1));
}
}
int main(){
in();
deal();
return 0;
}