Pagini recente » Cod sursa (job #673431) | Cod sursa (job #3169987) | Cod sursa (job #1523562) | Cod sursa (job #1118075) | Cod sursa (job #384642)
Cod sursa(job #384642)
#include <cstdio>
int n, m;
int d[100010][20];
inline int min(int a, int b) { return (a < b) ? a : b; }
int main()
{
int i, pow, j, x, y;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
scanf("%d", &d[i][0]);
for (pow = 0; 1 << (pow + 1) <= n; ++pow);
for (j = 1; j <= pow; ++j)
for (i = 1; i <= n; ++i)
{
int mn = d[i][j - 1];
if (i + (1 << (j - 1)) <= n && mn > d[i + (1 << (j - 1))][j - 1])
mn = d[i + (1 << (j - 1))][j - 1];
d[i][j] = mn;
}
for (i = 1; i <= m; ++i)
{
scanf("%d %d", &x, &y);
for (pow = 0; 1 << (pow + 1) <= y - x; ++pow);
printf("%d\n", min(d[x][pow], d[y - (1 << pow) + 1][pow]));
}
}