Pagini recente » Cod sursa (job #1957830) | Cod sursa (job #1281039) | Cod sursa (job #3142904) | Cod sursa (job #289926) | Cod sursa (job #2145161)
#include <bits/stdc++.h>
#define N 100001
using namespace std;
int n, m, i, r[N][40], lg[N], a[N];
void rmq()
{
int i, j, p;
// initialization
for (i = 1; i <= n; i++)
r[i][0] = a[i];
// dp
for (j = 1, p = 2; p <= n; j++, p <<= 1)
for (i = 1; i <= n - p + 1; i++)
r[i][j] = min(r[i][j - 1], r[i + (p >> 1)][j - 1]);
// compute log2
p = 2; j = 0;
for (i = 1; i <= n; i++)
{
if (i == p) j++, p <<= 1;
lg[i] = j;
}
}
int query(int a, int b)
{
int l = lg[b - a + 1];
return min(r[a][l], r[b - (1 << l) + 1][l]);
}
int main()
{
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
scanf("%i%i", &n, &m);
for (i = 1; i <= n; i++)
scanf("%i", &a[i]);
rmq();
int x, y;
while (m--)
{
scanf("%i%i", &x, &y);
printf("%i\n", query(x, y));
}
fclose(stdin);
fclose(stdout);
return 0;
}