Pagini recente » Cod sursa (job #1887990) | Cod sursa (job #2750174) | Cod sursa (job #2080625) | Cod sursa (job #2940636) | Cod sursa (job #1132738)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define INF 0x3f3f3f3f
#define nmax 100001
#define lmax 21
int i, j, k, N, M;
int nr, p, cnt;
int a, b;
int v[nmax];
int Log[nmax];
int dp[lmax][nmax];
int main() {
fin >> N >> M;
for (i = 1; i <= N; ++i) fin >> v[i];
for (i = 2; i <= N; ++i) Log[i] = Log[(i >> 1)] + 1;
memset(dp, INF, sizeof(dp));
for (i = 1; i <= N; ++i)
dp[0][i] = v[i];
for (cnt = 1; cnt <= N; cnt <<= 1);
for (i = 1; i <= cnt; ++i) {
for (j = 1; j + (1 << i) - 1 <= N; ++j)
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
}
for (i = 1; i <= M; ++i) {
fin >> a >> b;
if (b < a) swap(a, b);
p = Log[b - a];
fout << min(dp[p][a], dp[p][b - (1 << p) + 1]) << '\n';
}
return 0;
}