Pagini recente » Cod sursa (job #656065) | Cod sursa (job #847915) | Cod sursa (job #2615908) | Cod sursa (job #11510) | Cod sursa (job #2586365)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ( "rmq.in" );
ofstream g ( "rmq.out" );
int v[100002], lg[100002], rmq[18][100002];
int main()
{
int N, M;
f >> N >> M;
f >> v[1];
rmq[0][1] = v[1];
for ( int i = 2; i <= N; i++ )
{
f >> v[i];
lg[i] = lg[i / 2] + 1;
rmq[0][i] = v[i];
}
for ( int i = 1; ( 1 << i ) <= N; i++ )
{
int mx = N - ( 1 << i ) + 1 ;
for ( int j = 1; j <= mx; j++ )
rmq[i][j] = min ( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 1 ) )] );
}
int x, y;
while ( M-- )
{
f >> x >> y;
int dif = y - x + 1;
int diff = lg[dif], r = y - ( 1 << diff )+1;
g << min ( rmq[diff][x], rmq[diff][r] ) << '\n';
}
return 0;
}