Pagini recente » Cod sursa (job #2614818) | Cod sursa (job #925922) | Cod sursa (job #505610) | Cod sursa (job #1972742) | Cod sursa (job #2708427)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, v[100005], dp[100005][(int) log2(100005) + 1];
void citire() {
f >> n >> m;
for (int i = 1; i <= n; ++i)
f >> v[i];
}
void dinamica() {
int put = 1, colmax = log2(n), linmax;
for (int i = 1; i <= n; ++i)
dp[i][0] = i;
for (int j = 1; j <= colmax; ++j) {
linmax = n + 1 - (put << 1);
for (int i = 1; i <= linmax; ++i)
dp[i][j] = (v[dp[i][j - 1]] < v[dp[i + put][j - 1]]) ? dp[i][j - 1] : dp[i + put][j - 1];
put <<= 1;
}
}
void afisare() {
int st, dr;
for (int i = 0; i < m; ++i) {
f >> st >> dr;
int l = log2(dr - st + 1);
g << min(v[dp[st][l]], v[dp[dr - (1 << l) + 1][l]]) << '\n';
}
}
int main() {
citire();
dinamica();
afisare();
return 0;
}