Pagini recente » Cod sursa (job #506934) | Cod sursa (job #797796) | Cod sursa (job #1723095) | Cod sursa (job #1367010) | Cod sursa (job #188920)
Cod sursa(job #188920)
#include <iostream>
#include <cmath>
#define _name_ "rmq"
#define FIN _name_".in"
#define FOUT _name_".out"
#define MAXN 100001
int n, m;
int B[17][MAXN];
int Log[MAXN];
int p2[20];
inline int min(int a, int b) {
return a<b ? a : b;
}
void init()
{
p2[0] = 1;
for (int i = 1; i < 20; ++i)
p2[i] = p2[i-1] * 2;
for (int i = 1, j = 1, k = 0; i <= n; ++i) {
Log[i] = k;
if (i == j) j *= 2, k++;
}
}
void solvim()
{
int i, j, step;
for (i = step = 1; step < n; ++i, step *= 2) {
int lim = n-2*step+1;
for (j = 1; j <= lim; ++j) {
B[i][j] = min(B[i-1][j], B[i-1][j+step]);
}
}
}
void afish()
{
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d %d", &x, &y);
int len = (y-x+1), llen = Log[len];
printf("%d\n", min(B[llen][x], B[llen][y - p2[llen] + 1]));
}
}
void citirea()
{
freopen(FIN, "r", stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%d", B[0]+i);
}
}
int main()
{
init();
citirea();
solvim();
afish();
return 0;
}