Pagini recente » Cod sursa (job #3138375) | Cod sursa (job #1370746) | Cod sursa (job #2829620) | Monitorul de evaluare | Cod sursa (job #1801271)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define N 100010
#define LOGN 17
using namespace std;
int rmq[N][LOGN];
int log[N];
int main(){
int n,m,i,pow2;
int j;
int x,y;
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for( i=1 ; i<=n ; i++ ){
scanf("%d",&rmq[i][0]);
}
for(i=2 ; i<=n ; i++){
log[i] = log [ i>>1] + 1;
}
for(pow2 = 1 , j = 1; 2 * pow2 <= n ; pow2<<=1 , j++ ){
for( i=1 ; i + pow2 <=n ;i++ ){
rmq[i][j] = min ( rmq[i][j-1], rmq[ i + pow2 ][ j-1 ] );
}
}
for(i=0; i < m ; i++){
scanf("%d%d",&x,&y);
int lg = log[ y-x+1 ];
printf("%d\n", min( rmq[ x ] [ lg ] , rmq[ y - (1<<lg) + 1 ][ lg ] ) );
}
return 0;
}