Pagini recente » Cod sursa (job #2409503) | Cod sursa (job #632416) | Cod sursa (job #41012) | Cod sursa (job #2519441) | Cod sursa (job #628381)
Cod sursa(job #628381)
#include <fstream>
#include <cstdlib>
#define N_MAX 100011
#define Log2N_MAX 19
using namespace std;
int RMQ[Log2N_MAX][N_MAX];
inline int _min( int x, int y )
{
if( x <= y )
return x;
return y;
}
inline int Log2(int N ) { return 31-__builtin_clz(N); }
int main( void )
{
int N, M, i, j, k, till, a, b, log2N;
ifstream in( "rmq.in" );
in>>N>>M;
for( i=1; i <= N; ++i )
in>>RMQ[0][i];
log2N=Log2(N);
for( i=1, j=1; i <= log2N; ++i, j<<=1 )
{
till=N-(j<<1)+1;
for( k=1; k <= till; ++k )
RMQ[i][k]=_min( RMQ[i-1][k], RMQ[i-1][k+j] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>a>>b;
k=Log2( b-a+1 );
out<<_min( RMQ[k][a], RMQ[k][b-(1<<k)+1] )<<'\n';
}
return EXIT_SUCCESS;
}