比赛 |
Segment Tree Competition |
评测结果 |
AAAAAAAATT |
题目名称 |
延绵的山峰 |
最终得分 |
80 |
用户昵称 |
Tiny |
运行时间 |
2.212 s |
代码语言 |
C++ |
内存使用 |
80.42 MiB |
提交时间 |
2016-08-28 19:02:23 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
namespace xiaoxiao{
#define FO(name) freopen(#name".in","r",stdin),freopen(#name".out","w",stdout)
#define FC fclose(stdin),fclose(stdout)
#define test(name) freopen(#name".txt","r",stdin)
#define ifor(a,b,c) for(int a=(b);a<=(c);++a)
#define dfor(a,b,c) for(int a=(b);a>=(c);--a)
#define Max(a,b) ((a)>(b)? (a):(b))
#define Min(a,b) ((a)<(b)? (a):(b))
typedef long long LL;
inline LL QR(){
char ch;
bool minus=0;
LL x=0;
while(ch=getchar(),ch<'-'||ch>'9');
if(ch=='-') minus=1,ch=getchar();
while(x=x*10+ch-48,ch=getchar(),ch>='0'&&ch<='9');
if(minus) return -x;
return x;
}
inline void QW(LL num,char ch){
if(num<0) num=-num,putchar('-');
int cnt=0;
string str;
while(str[++cnt]=num%10+'0',num/=10);
while(putchar(str[cnt]),--cnt);
putchar(ch);
}
inline long double FQR(){
char ch;
bool minus=0;
long double num=0;
int cnt=0;
while(ch=getchar(),ch<'-'||ch>'9');
if(ch=='-') minus=1,ch=getchar();
while(num=num*10+ch-48,ch=getchar(),ch>='0'&&ch<='9');
if(ch=='.'){
ch=getchar();
while(num+=1.0*(ch-48)/pow(10,++cnt),ch=getchar(),ch>='0'&&ch<='9');
}
if(minus) return -num;
return num;
}
}
using namespace xiaoxiao;
void work();
int main(){
FO(climb);
work();
FC;
return 0;
}
const int ma=1e6+10;
int n,q;
int h[ma],rmax[ma][20];
void rmqinit();
int rmqmax(int,int);
void work(){
n=QR();
ifor(i,1,n+1) h[i]=rmax[i][0]=QR();
rmqinit();
q=QR();
ifor(i,1,q){
int a=QR(),b=QR();
QW(rmqmax(a+1,b+1),'\n');
}
}
void rmqinit(){
int m=log(1.0*n)/log(2.0);
ifor(j,1,m){
ifor(i,1,n){
rmax[i][j]=rmax[i][j-1];
int tmp=1<<(j-1);
if(i+tmp<=n) rmax[i][j]=Max(rmax[i][j],rmax[i+tmp][j-1]);
}
}
}
int rmqmax(int s,int t){
int m=log(1.0*(t-s+1))/log(2.0),k=1<<m;
return Max(rmax[s][m],rmax[t-k+1][m]);
}