Pagini recente » Cod sursa (job #2705667) | Cod sursa (job #2157908) | Cod sursa (job #157373) | Cod sursa (job #1964646) | Cod sursa (job #2244606)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, m, st, dr, dif, p, minim, p2;
int Min[100001][18];
int main() {
fin >> n >> m;
for (int i = 1; i <= n; ++i)
fin >> Min[i][1];
for (int d = 1, j = 2; d <= n; d *= 2, ++j) {
for (int i = 1; i + d - 1 <= n; ++i)
Min[i][j] = min(Min[i][j - 1], Min[i + d][j - 1]);
}
for (int i = 1; i <= m; ++i) {
fin >> st >> dr;
dif = dr - st + 1;
p = 1;
p2 = 1;
minim = Min[st][1];
while (dif) {
if (dif % 2) {
minim = min(minim, Min[st][p2]);
st += p;
}
++p2;
p *= 2;
dif /= 2;
}
fout << minim << '\n';
}
}