Pagini recente » Cod sursa (job #3166239) | Cod sursa (job #1068567) | Cod sursa (job #2456914) | Cod sursa (job #2264980) | Cod sursa (job #384648)
Cod sursa(job #384648)
#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)
d[i][j] = min(d[i][j - 1], (i + (1 << (j - 1)) <= n) ? d[i + (1 << (j - 1))][j - 1] : d[i][j - 1]);
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]));
}
}