Pagini recente » Cod sursa (job #2384811) | Cod sursa (job #2169701) | Cod sursa (job #1057541) | Cod sursa (job #1743211) | Cod sursa (job #400548)
Cod sursa(job #400548)
#include<cstdio>
#define max 100005
int M[18][max];
int V[max],n,m,Log[max];
inline int min(int a, int b){ return a<b?a:b; }
int main(){
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int i,j;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&V[i]);
for(i=1;i<=n;i++) M[0][i] = V[i];
for( i=1; (1<<i) <= n; i++)
for(j=1;j <= n - ( 1<<i ) + 1 ; j++){
int l = 1<<(i-1);
M[i][j] = min( M[i-1][j],M[i-1][j+l] );
}
Log[1]=0;
for(i=2;i<=n;i++)Log[i] = 1+Log[i/2];
while( m-- ){
scanf("%d %d",&i,&j);
int k = Log[j-i+1];
printf("%d\n",min( M[k][i], M[k][j - (1<<k)+1]));
}
return 0;
}