Pagini recente » Cod sursa (job #1019700) | Cod sursa (job #714714) | Cod sursa (job #1097283) | Cod sursa (job #1242325) | Cod sursa (job #3124219)
#include <iostream>
#include <cmath>
int n, m, v[100005], lung[100005], rmq[100005][20], x, y;
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%d", &v[i]);
}
for(int i = 2; i <= n; ++i) lung[i] = lung[i >> 1] + 1;
for(int i = 1; i <= n; ++i) rmq[0][i] = v[i];
for(int i = 1; (1 << i) <= n; i++) {
for(int j = 1, l; j <= n - (1 << i) + 1; j++)
{
l = 1 << (i - 1);
rmq[i][j] = std::min(rmq[i-1][j], rmq[i-1][j+l]);
}
}
for(int i = 1, d, l; i <= m; i++)
{
scanf("%d %d", &x, &y);
d = y - x + 1;
l = lung[d];
printf("%d\n", std::min(rmq[l][x], rmq[l][x + d - (1 << l)]));
}
fclose(stdin);
fclose(stdout);
return 0;
}