记录编号 | 304293 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 延绵的山峰 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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; }