Pagini recente » Cod sursa (job #3125667) | Cod sursa (job #1249449) | Cod sursa (job #1491539) | Cod sursa (job #1968326) | Cod sursa (job #524195)
Cod sursa(job #524195)
/*
* File: main.cpp
* Author: salexandru
*
* Created on January 20, 2011, 4:18 PM
*/
#include <fstream>
#include <cstdlib>
#define N_MAX 100011
#define LOGN_MAX 17
using namespace std;
/*
*
*/
int RMQ[N_MAX][LOGN_MAX];
inline int log2( int N )
{
return (8*sizeof(int)-1)-(__builtin_clz(N));
}
int main(int argc, char** argv)
{
int N, log2N, M, i, j, k, c;
ifstream in( "rmq.in" );
in>>N>>M;
log2N=log2(N);
if( 0 != ( N & (N-1) ) )
++log2N;
for( i=1; i <= N; ++i )
in>>RMQ[0][i];
for( j=1; j <= log2N; ++j )
{
c=N-(1<<j)+1;
k=1<<(j-1);
for( i=1; i <= c; ++i )
RMQ[j][i]=min( RMQ[j-1][i], RMQ[j-1][i+k] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>i>>j;
k=log2( j-i+1 )+1;
out<<min( RMQ[k][i], RMQ[k][j-(1<<k)+1] )<<'\n';
}
return 0;
}