Pagini recente » Cod sursa (job #829351) | Cod sursa (job #893362) | Cod sursa (job #1168712) | Cod sursa (job #2503341) | Cod sursa (job #2249641)
#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 = 0; p2 = 1;
while (dif) {
dif /= 2;
++p;
p2 *= 2;
}
p2 /= 2;
minim = min(Min[st][p], Min[dr - p2 + 1][p]);
fout << minim << '\n';
}
}