记录编号 |
352637 |
评测结果 |
AAAAAAAAAA |
题目名称 |
延绵的山峰 |
最终得分 |
100 |
用户昵称 |
_Itachi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.748 s |
提交时间 |
2016-11-17 14:55:06 |
内存使用 |
88.03 MiB |
显示代码纯文本
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxn=1000005;
- int n,m,Log[maxn],L2[maxn],f[maxn][21],Len=0;
- void Rabit_in(){
- scanf("%d",&n);int i,v=1;
- scanf("%d",&i);
- for(i=1;i<=n;i++){
- scanf("%d",&f[i][0]);
- Log[i]=Len;
- if(i==v)v<<=1,Len++;
- }
- //for(i=1;i<=n;i++)printf("%d ",Log[i]);
- }
- int Rabit_max(int a,int b){return a>b?a:b;}
- void Rabit_run(){
- int v,i,t,V;
- for(v=1;v<=Len;v++)
- for(V=1<<(v-1),t=n-(V<<1)+1,i=1;i<=t;i++)
- f[i][v]=Rabit_max(f[i][v-1],f[i+V][v-1]);
- }
- int Rabit_get(int l,int r){
- int len=r-l+1;len=Log[len]-1;
- return Rabit_max(f[l][len],f[r-(1<<len)+1][len]);
- }
- void Rabit_ans(){
- int l,r;scanf("%d",&m);
- while(m--){
- scanf("%d%d",&l,&r);
- if(l==r){printf("%d\n",f[l][0]);continue;}
- if(!l)l++;
- printf("%d\n",Rabit_get(l,r));
- }
- }
- void Rabit_main(){
- Rabit_in();
- Rabit_run();
- Rabit_ans();
- }
- int main(){
- #define _Rabit _RABIT
- #ifdef _Rabit
- freopen("climb.in","r",stdin);
- freopen("climb.out","w",stdout);
- #endif
- Rabit_main();
- #ifndef _Rabit
- getchar(),getchar();
- #endif
- fclose(stdin);fclose(stdout);
- return 0;
- }