Pagini recente » Cod sursa (job #301850) | Cod sursa (job #2438713) | Cod sursa (job #114816) | Cod sursa (job #2525033) | Cod sursa (job #715875)
Cod sursa(job #715875)
#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 ) { return x <= y ? x : y; }
inline int log2(int x ) { return 8*sizeof(int)-1-__builtin_clz(x); }
int main()
{
int N, M, i, j, jAnt, till, k, x, y;
ifstream in( "rmq.in" );
ofstream out( "rmq.out" );
in>>N>>M;
for( i=0; i < N; ++i )
in>>RMQ[0][i];
for( i=1, j=2, jAnt=1; j <= N; ++i, jAnt=j, j<<=1 )
{
till=N-j;
for( k=0; k <= till; ++k )
RMQ[i][k]=_min( RMQ[i-1][k], RMQ[i-1][k+jAnt] );
}
while( M-- )
{
in>>x>>y;
--x, --y;
k=log2(y-x+1);
out<<_min( RMQ[k][x], RMQ[k][y-(1<<k)+1] )<<'\n';
}
return EXIT_SUCCESS;
}