记录编号 304293 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 GravatarTwist Fate 是否通过 通过
代码语言 C++ 运行时间 1.340 s
提交时间 2016-09-07 22:10:54 内存使用 80.31 MiB
显示代码纯文本
  1. //手打线段树
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. const int INF=1000000000;
  6. int minv[30000005];
  7. int ql,qr;
  8. int p,v;
  9. void add(int o,int l,int r){
  10. int m=l+(r-l)/2;
  11. if(l==r)minv[o]=v;
  12. else {
  13. if(p<=m) add(2*o,l,m);
  14. else add(2*o+1,m+1,r);
  15. minv[o]=max(minv[2*o],minv[2*o+1]);
  16. }
  17. }
  18. int search(int o,int l,int r){
  19. int m=l+(r-l)/2,ans=0;
  20. if(ql<=l&&r<=qr)return minv[o];
  21. if(ql<=m)ans=max(ans,search(2*o,l,m));
  22. if(qr>m)ans=max(ans,search(2*o+1,m+1,r));
  23. return ans;
  24. }
  25. int main(){
  26. freopen("climb.in","r",stdin);
  27. freopen("climb.out","w",stdout);
  28. int n;
  29. scanf("%d",&n);
  30. for(int i=0;i<=n;i++){
  31. scanf("%d",&v);
  32. p=i;
  33. add(1,0,n);
  34. }
  35. int q;
  36. scanf("%d",&q);
  37. for(int i=1;i<=q;i++){
  38. scanf("%d%d",&ql,&qr);
  39. int k=search(1,0,n);
  40. printf("%d\n",k);
  41. }
  42. return 0;
  43. }