Pagini recente » Cod sursa (job #2887802) | Cod sursa (job #2482557) | Cod sursa (job #2142078) | Cod sursa (job #1669963) | Cod sursa (job #2552648)
#include <fstream>
#define N 100001
using namespace std;
ifstream f ( "rmq.in" );
ofstream g ( "rmq.out" );
int Min[N][21], log[N];
int main()
{ int n, q, i, j, x, y, k = -1;
f >> n >> q;
for ( i = 1; i <= n; i *= 2 )
log[i] = ++k;
for ( i = 1; i <= n; i++ )
if ( log[i] == 0 )
log[i] = log[i - 1];
for ( i = 1; i <= n; i++ )
f >> Min[i][0];
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 dis = y - x + 1;
int l1 = log[dis];
dis = y - x - ( 1 << l1 ) + 1;
int l2 = log[dis];
int MIN = min ( Min[x][l1], Min[x + ( 1 << l1 )][l2] );
g << MIN << '\n';
}
return 0;
}