Pagini recente » Cod sursa (job #431251) | Cod sursa (job #1206057) | Cod sursa (job #1687849) | Istoria paginii planificare/sedinta_20070215 | Cod sursa (job #738548)
Cod sursa(job #738548)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N_MAX=100011;
const int LOG2N_MAX=17;
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)-__builtin_clz(x)-1; }
int main()
{
int N, M, i, j, k, kLast, Log2, till, x, y;
ifstream in("rmq.in");
ofstream out("rmq.out");
in>>N>>M;
for(i=1; i <= N; ++i)
in>>RMQ[0][i];
Log2=log2(N);
for(j=1, k=2, kLast=1; j <= Log2; ++j, kLast=k, k<<=1)
{
till=N-k+1;
for(i=1; i <= till; ++i)
RMQ[j][i]=_min(RMQ[j-1][i], RMQ[j-1][i+kLast]);
}
for(; M; --M)
{
in>>x>>y;
j=log2(y-x+1);
out<<_min(RMQ[j][x], RMQ[j][y-(1<<j)+1] )<<'\n';
}
return EXIT_SUCCESS;
}