Pagini recente » Politia | Cod sursa (job #654097) | Cod sursa (job #231335) | Cod sursa (job #1462563) | Cod sursa (job #754385)
Cod sursa(job #754385)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N_MAX=100011;
const int LOGN_MAX=17;
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, log2N, len, pow2, x, y;
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=1; i <= log2N; ++i, pow2<<=1)
{
till=N-(pow2<<1)+1;
for(j=1; j <= till; ++j)
RMQ[i][j]=_min(RMQ[i-1][j], RMQ[i-1][j+pow2]);
}
for(; M; --M)
{
in>>x>>y;
len=log2(y-x+1);
out<<_min(RMQ[len][x], RMQ[len][y - (1<<len) + 1])<<"\n";
}
return EXIT_SUCCESS;
}