Pagini recente » Cod sursa (job #897721) | Cod sursa (job #93650) | Cod sursa (job #1753574) | Cod sursa (job #2313699) | Cod sursa (job #2835614)
#include <fstream>
using namespace std;
int n, m, st, dr, i, e, j, d[20][100010], L[100010];
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin >> n >> m;
for (i = 1; i <= n; i++) {
fin >> d[0][i];
}
for (e = 1; (1 << e) <= n; e++) {
for (i = 1; i <= n; i++) {
d[e][i] = d[e - 1][i];
j = i + (1 << (e - 1));
if (j <= n && d[e][i] > d[e - 1][j]) {
d[e][i] = d[e - 1][j];
}
}
}
L[1] = 0;
for (i = 2; i <= n; i++) {
L[i] = L[i / 2] + 1;
}
for (i = 1; i <= m; i++) {
fin >> st >> dr;
e = L[dr - st + 1];
dr = dr - (1 << e) + 1;
fout << min(d[e][st], d[e][dr]) << "\n";
}
return 0;
}