Pagini recente » Cod sursa (job #2632929) | Cod sursa (job #2677161) | Rating Stroe Andra-Nicoleta (NuSuntEu) | Cod sursa (job #2799105) | Cod sursa (job #751251)
Cod sursa(job #751251)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N_MAX=100011;
const int LOGN_MAX=18;
int RMQ[LOGN_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, till, x, y, log2N, pow, pow2;
ifstream in("rmq.in");
ofstream out("rmq.out");
in>>N>>M;
for(i=1; i <= N; ++i)
in>>RMQ[0][i];
log2N=log2(N);
for(i=1, pow2=2, pow=1; i <= log2N; ++i, pow=pow2, pow2<<=1)
{
till=N-pow2+1;
for(j=1; j <= till; ++j)
RMQ[i][j]=_min(RMQ[i-1][j], RMQ[i-1][j+pow]);
}
for(; M; --M)
{
in>>x>>y;
log2N=log2(y-x+1);
out<<_min(RMQ[log2N][x], RMQ[log2N][y-(1<<log2N)+1])<<"\n";
}
return EXIT_SUCCESS;
}