记录编号 352637 评测结果 AAAAAAAAAA
题目名称 延绵的山峰 最终得分 100
用户昵称 Gravatar_Itachi 是否通过 通过
代码语言 C++ 运行时间 1.748 s
提交时间 2016-11-17 14:55:06 内存使用 88.03 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int maxn=1000005;
  6. int n,m,Log[maxn],L2[maxn],f[maxn][21],Len=0;
  7. void Rabit_in(){
  8. scanf("%d",&n);int i,v=1;
  9. scanf("%d",&i);
  10. for(i=1;i<=n;i++){
  11. scanf("%d",&f[i][0]);
  12. Log[i]=Len;
  13. if(i==v)v<<=1,Len++;
  14. }
  15. //for(i=1;i<=n;i++)printf("%d ",Log[i]);
  16. }
  17. int Rabit_max(int a,int b){return a>b?a:b;}
  18. void Rabit_run(){
  19. int v,i,t,V;
  20. for(v=1;v<=Len;v++)
  21. for(V=1<<(v-1),t=n-(V<<1)+1,i=1;i<=t;i++)
  22. f[i][v]=Rabit_max(f[i][v-1],f[i+V][v-1]);
  23. }
  24. int Rabit_get(int l,int r){
  25. int len=r-l+1;len=Log[len]-1;
  26. return Rabit_max(f[l][len],f[r-(1<<len)+1][len]);
  27. }
  28. void Rabit_ans(){
  29. int l,r;scanf("%d",&m);
  30. while(m--){
  31. scanf("%d%d",&l,&r);
  32. if(l==r){printf("%d\n",f[l][0]);continue;}
  33. if(!l)l++;
  34. printf("%d\n",Rabit_get(l,r));
  35. }
  36. }
  37. void Rabit_main(){
  38. Rabit_in();
  39. Rabit_run();
  40. Rabit_ans();
  41. }
  42. int main(){
  43. #define _Rabit _RABIT
  44. #ifdef _Rabit
  45. freopen("climb.in","r",stdin);
  46. freopen("climb.out","w",stdout);
  47. #endif
  48. Rabit_main();
  49. #ifndef _Rabit
  50. getchar(),getchar();
  51. #endif
  52. fclose(stdin);fclose(stdout);
  53. return 0;
  54. }