Pagini recente » Cod sursa (job #2044329) | Cod sursa (job #2829014) | Cod sursa (job #549949) | Istoria paginii runda/simulareoni2011/clasament | Cod sursa (job #178748)
Cod sursa(job #178748)
#include<stdio.h>
const int N=100017;
const int M=1000017;
const int LOG=17;
int v[N],a[N][LOG],log[N],n,m;
void calcul_log(){
int x=1,y=0;
for(int i=1 ; i<=n ; ++i)
if(i<(x<<1))
log[i]=y;
else{
x<<=1;
log[i]=++y;
}
}
void citire_vector(){
scanf("%d%d" , &n , &m);
for(int i=1 ; i<=n ; ++i)
scanf("%d", &v[i]);
}
inline int min(int x,int y){
if(x<y)
return x;
return y;
}
void calcul_a(){
int i,j;
for(i=n ; i ; --i){
a[i][0]=v[i];
for(j=1 ; i+(1<<j)<=n+1 ; ++j)
a[i][j]=min(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}
}
void scrie(){
int x,y,lung;
for(int i=1 ; i<=m ; ++i){
scanf("%d%d",&x,&y);
lung=log[y-x+1];
printf("%d\n",min(a[x][lung],a[y-(1<<lung)+1][lung]));
}
}
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire_vector();
calcul_log();
calcul_a();
scrie();
return 0;
}