Pagini recente » Cod sursa (job #1819059) | Cod sursa (job #2377697) | Cod sursa (job #1889881) | Cod sursa (job #2391953) | Cod sursa (job #492248)
Cod sursa(job #492248)
/*
* File: main.cpp
* Author: bitone
*
* Created on October 13, 2010, 9:04 PM
*/
#include <fstream>
#include <cstdlib>
#define MAX_N 100011
#define LOGMAX_N 17
using namespace std;
/*
*
*/
int RMQ[MAX_N][LOGMAX_N];
inline int log2( int N )
{
if( N <= 0 )
return -1;
if( 1 == N )
return 0;
int r=0;
if( N >= 1<<16 )
N>>=16, r+=16;
if( N >= 1<<8 )
N>>=8, r+=8;
if( N >= 1<<4 )
N>>=4, r+=4;
if( N >= 1<<2 )
N>>=2, r+=2;
if( N >= 1<<1 )
r+=1;
return r;
}
int main(int argc, char** argv)
{
int N, Log2N, M, i, j, idx, jdx;
ifstream in( "rmq.in" );
in>>N>>M;
for( i=1; i <= N; ++i )
in>>RMQ[i][0];
for( i=1; (1<<i) <= N; ++i )
{
idx=1<<(i-1);
jdx=N-(2*idx)+1;
for( j=1; j <= jdx; ++j )
RMQ[j][i]=min( RMQ[j][i-1], RMQ[j+idx][i-1] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>i>>j;
idx=log2( j-i+1 );
jdx=1<<idx;
out<<min( RMQ[i][idx], RMQ[j-jdx+1][idx] )<<'\n';
}
return EXIT_SUCCESS;
}