记录编号 |
225514 |
评测结果 |
AAAAAAAAAA |
题目名称 |
忠诚 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.452 s |
提交时间 |
2016-02-17 14:07:38 |
内存使用 |
1.82 MiB |
显示代码纯文本
#include<cstdio>
#define lch(x) x<<1
#define rch(x) x<<1|1
#define min(a,b) a<b?a:b
int minv[400050];
void build(int rt,int a,int b){
if(a==b)scanf("%d",minv+rt);
else{
build(lch(rt),a,(a+b)>>1);
build(rch(rt),((a+b)>>1)+1,b);
minv[rt]=min(minv[lch(rt)],minv[rch(rt)]);
}
}
int query(int rt,const int &a,const int &b,int l,int r){
if(a<=l&&r<=b)return minv[rt];
else{
if(b<=(l+r)>>1)return query(lch(rt),a,b,l,(l+r)>>1);
else if(a>=((l+r)>>1)+1)return query(rch(rt),a,b,((l+r)>>1)+1,r);
else return min(query(lch(rt),a,b,l,(l+r)>>1),query(rch(rt),a,b,((l+r)>>1)+1,r));
}
}
int main(){
freopen("faithful.in","r",stdin);
freopen("faithful.out","w",stdout);
int n,m;
scanf("%d %d",&m,&n);
build(1,1,m);
int x,y;
for(int i = 0;i<n;++i){
scanf("%d %d",&x,&y);
printf("%d ",query(1,x,y,1,m));
}
fclose(stdin);fclose(stdout);
return 0;
}