Pagini recente » Istoria paginii runda/preoji2010_runda1/clasament | Cod sursa (job #887644) | Cod sursa (job #1095313) | Cod sursa (job #705711) | Cod sursa (job #582234)
Cod sursa(job #582234)
#include <fstream>
#include <cstdlib>
#define N_MAX 100011
#define l2N 18
using namespace std;
int RMQ[l2N][N_MAX];
inline int _max( int x, int y ) { return ( x >= y ? x : y); }
inline int _min( int x, int y ) { return ( x <= y ? x : y); }
inline int log2N( int N ) { return 31-__builtin_clz(N); }
int main( void )
{
int N, M, logN, till, i, i2, j, k;
ifstream in( "rmq.in" );
in>>N>>M;
logN=log2N(N);
for( i=1; i <= N; ++i )
in>>RMQ[0][i];
for( i=1, i2=1; i <= N; ++i, i2<<=1 )
{
till=N-(i2<<1)+1;
for( j=1; j <= till; ++j )
RMQ[i][j]=_min( RMQ[i-1][j], RMQ[i-1][j+i2] );
}
ofstream out( "rmq.out" );
for( ; M; --M )
{
in>>i>>j;
k=log2N( j-i+1 );
out<<_min( RMQ[k][i], RMQ[k][j-(1<<k)+1] )<<'\n';
}
return EXIT_SUCCESS;
}