Pagini recente » Cod sursa (job #3135188) | Cod sursa (job #1717374) | Cod sursa (job #815136) | Cod sursa (job #524194) | Cod sursa (job #544999)
Cod sursa(job #544999)
#include <fstream>
#include <cstdlib>
#define N_MAX 100011
#define LOG2N_MAX 18
using namespace std;
int RMQ[LOG2N_MAX][N_MAX];
inline int _min( int x, int y ) { return ( x <= y ? x : y ); }
int log2N( int x )
{
int l2x=1;
for( ; (1<<l2x) <= x; ++l2x);
return l2x-1;
}
int main( void )
{
int N, l2N, M, i, idx, j, jdx;
ifstream in( "rmq.in" );
in>>N>>M;
l2N=log2N(N);
for( i=1; i <= N; ++i )
in>>RMQ[0][i];
for( i=1, idx=1; i <= l2N; ++i, idx*=2 )
{
jdx=N-2*idx+1;
for( j=1; j <= jdx; ++j )
RMQ[i][j]=_min( RMQ[i-1][j], RMQ[i-1][j+idx] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>i>>j;
l2N=log2N( j-i+1 );
out<<_min( RMQ[l2N][i], RMQ[l2N][j-(1<<l2N)+1] )<<'\n';
}
return EXIT_SUCCESS;
}