Pagini recente » Cod sursa (job #2496257) | Cod sursa (job #2069562) | Cod sursa (job #2766175) | Cod sursa (job #1081728) | Cod sursa (job #424809)
Cod sursa(job #424809)
#include <stdio.h>
#define Nmax 100005
#define Lmax 18
int a[Lmax][Nmax];
int v[Nmax],pow[Nmax];
int n,m,i,j;
int x,y,dif,lg,p;
inline int min(int x,int y){ return x<y ? x:y; }
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) scanf("%d",&v[i]),a[0][i]=v[i];
pow[1]=0;
for(i=2;i<=n;++i)
pow[i]=pow[i/2]+1;
for(i=1; (1<<i) <= n; ++i)
for(j=1; j+(1<<i)-1<=n; ++j)
a[i][j]=min(a[i-1][j], a[i-1][j+(1<<(i-1))]);
for(; m; --m){
scanf("%d%d",&x,&y);
lg=y-x+1;
dif=lg-(1<<pow[lg]);
printf("%d\n",min(a[pow[lg]][x],a[pow[lg]][x+dif]));
}
fclose(stdin); fclose(stdout);
return 0;
}