Pagini recente » Cod sursa (job #214090) | Cod sursa (job #1844027) | Cod sursa (job #177404) | Cod sursa (job #2819870) | Cod sursa (job #2552646)
#include <fstream>
#include <climits>
#define N 100001
using namespace std;
ifstream f ( "rmq.in" );
ofstream g ( "rmq.out" );
int Min[N][21], log[N];
int answer ( int x, int y ){
int MIN = INT_MAX;
while ( x < y ){
int p = log[y - x + 1];
MIN = min ( MIN, Min[x][p] );
x = x + ( 1 << p ) - 1;
}
return MIN;
}
int main()
{ int n, q, i, j, x, y, k = -1;
f >> n >> q;
for ( i = 1; i <= n; i++ ){
f >> x;
Min[i][0] = x;
}
for ( j = 1; ( 1 << j ) <= n; j++ )
for ( i = 1; i <= n; i++ )
if ( i + ( 1 << j ) - 1 <= n )
Min[i][j] = min ( Min[i][j - 1], Min[i + ( 1 << ( j - 1 ) )][j - 1] );
for ( i = 1; i <= q; i++ ){
f >> x >> y;
int nr = y - x + 1;
int byte = 0, MIN = INT_MAX;
while ( nr != 0 ){
if ( nr % 2 == 1 ){
MIN = min ( MIN, Min[x][byte] );
x += ( 1 << byte );
}
byte++;
nr = ( nr >> 1 );
}
g << MIN << '\n';
}
return 0;
}