Pagini recente » Cod sursa (job #40587) | Cod sursa (job #445402) | Cod sursa (job #295793) | Cod sursa (job #220989) | Cod sursa (job #460127)
Cod sursa(job #460127)
#include <cstdlib>
#include <fstream>
#define Nmax 100111
#define LogNmax 17
/*
*
*/
using namespace std;
int RMQ[Nmax][LogNmax];
inline int Log2( int N )
{
if( N <= 0 )
return -1;
int r=0;
if( N >= 65536 )
N>>=16, r+=16;
if( N >= 256 )
N>>=8, r+=8;
if( N >= 16 )
N>>=4, r+=4;
if( N >= 4 )
N>>=2, r+=2;
if( N >= 2 )
r+=1;
return r;
}
int main( void )
{
int N, M, i, j, jdx, Log2N, till;
ifstream in( "rmq.in" );
in>>N>>M;
for( i=0; i < N; ++i )
in>>RMQ[i][0];
Log2N=Log2(N);
for( j=1; j <= Log2N; ++j )
{
jdx=( 1<<(j-1) );
till=N-jdx*2+1;
for( i=0; i < till; ++i )
RMQ[i][j]=min( RMQ[i][j-1], RMQ[i+jdx][j-1] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>i>>j;
jdx=Log2( j-i+1 );
out<<min( RMQ[i-1][jdx], RMQ[j-(1<<jdx)][jdx] )<<'\n';
}
return EXIT_SUCCESS;
}