Pagini recente » Cod sursa (job #2223921) | Cod sursa (job #505788) | Cod sursa (job #31113) | Cod sursa (job #441702) | Cod sursa (job #1180998)
#include <cstdio>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100005
int r[MAX][18], n, m, x, y, k;
void rmq() {
for (int j = 1; (1 << j) < n; j++) {
for (int i = 0; i + (1 << j) - 1 < n; i++)
r[i][j] = min(r[i][j-1], r[i + (1 << (j-1))][j-1]);
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) scanf("%d", &r[i][0]);
rmq();
for (int i = 0; i < m; i++) {
scanf("%d %d", &x, &y);
x--; y--;
if (y < x) swap(x, y);
k = log(y-x+1)/log(2);
printf("%d\n", min(r[x][k], r[y-(1<<k)+1][k]));
}
return 0;
}