Pagini recente » Cod sursa (job #2213154) | Cod sursa (job #1990592) | Cod sursa (job #240945) | Cod sursa (job #1097451) | Cod sursa (job #1886496)
#include <stdio.h>
#include <algorithm>
#define N 100001
using namespace std;
int n, m, a[N], r[N][19], l[N];
void rmq()
{
int i, j, p;
for (i = 1; i <= n; i++) r[i][0] = a[i];
for (j = 1, p = 2; p <= n; j++, p <<= 1) // DP
for (i = 1; i <= n - p + 1; i++) {
r[i][j] = min(r[i][j - 1], r[i + (p >> 1)][j - 1]);
}
//compute log values
j = 0;
p = 2;
for (i = 2; i <= n; i++) {
if (i == p) j++, p <<= 1;
l[i] = j;
}
}
int query(int x, int y)
{
int q = l[y - x + 1];
return min(r[x][q], r[y - (1 << q) + 1][q]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%i%i", &n, &m);
int i;
for (i = 1; i <= n; i++)
scanf("%i", &a[i]);
rmq();
int x, y;
for (i = 1; i <= m; i++) {
scanf("%i%i", &x, &y);
printf("%i\n", query(x, y));
}
return 0;
}