Pagini recente » Cod sursa (job #2711520) | Cod sursa (job #669365) | Cod sursa (job #1287395) | Cod sursa (job #1654120) | Cod sursa (job #2748954)
#include <cstdio>
#define min(x, y) ((x) < (y)) ? (x) : (y)
#define LMAX 18
#define NMAX 100005
#define infile "rmq.in"
#define outfile "rmq.out"
int n, m, l, r;
int lg[NMAX], st[LMAX][NMAX], v[NMAX];
int main()
{
freopen(infile, "r", stdin);
freopen(outfile, "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i)
{
scanf("%d", v + i);
}
lg[1] = 0;
for (int i = 2; i <= n; ++i)
lg[i] = lg[i / 2] + 1;
for (int i = 1; i <= n; ++i)
{
st[0][i] = v[i];
}
for (int i = 1; (1 << i) <= n; ++i)
{
for (int j = 1; j <= n - (1 << i) + 1; ++j)
{
l = 1 << (i - 1);
st[i][j] = min(st[i - 1][j], st[i - 1][j + l]);
}
}
for (int i = 0; i < m; ++i)
{
scanf("%d %d", &l, &r);
int j = lg[r - l + 1];
int sh = (r - l + 1) - (1 << j);
int minim = min(st[j][l], st[j][l + sh]);
printf("%d\n", minim);
}
fclose(stdin);
fclose(stdout);
return 0;
}