Pagini recente » Cod sursa (job #652254) | Cod sursa (job #2901084) | Cod sursa (job #3312461) | Cod sursa (job #3314725) | Cod sursa (job #673985)
Cod sursa(job #673985)
#include <fstream>
#include <cstdlib>
#define N_MAX 100011
#define LOGN_MAX 17
using namespace std;
int RMQ[LOGN_MAX][N_MAX];
inline int _min( int x, int y ) { return x <= y ? x : y; }
inline int log2( int x ) { return 8*sizeof(int) - __builtin_clz(x) - 1; }
int main()
{
int N, M, i, j, k, till, lastK;
ifstream in( "rmq.in" );
ofstream out( "rmq.out" );
in>>N>>M;
for( j=1; j <= N; ++j )
in>>RMQ[0][j];
for( i=1, k=2; k <= N; ++i, k<<=1 )
{
till=N-k+1;
lastK=k>>1;
for( j=1; j <= till; ++j )
RMQ[i][j]=_min( RMQ[i-1][j], RMQ[i-1][lastK+j] );
}
for( ; M; --M )
{
in>>k>>j;
i=log2( j-k+1 );
out<<_min( RMQ[i][k], RMQ[i][j-(1<<i)+1] )<<'\n';
}
return EXIT_SUCCESS;
}