Pagini recente » Cod sursa (job #1230361) | Cod sursa (job #2432974) | Cod sursa (job #3251841) | Cod sursa (job #181337) | Cod sursa (job #2254249)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int N, M;
int number = 0;
vector<int> numbers;
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> N >> M;
for (int i = 0; i < N; i++) {
in >> number;
numbers.push_back(number);
}
int l[N][N] = {{0}};
for (int i = 0; i < N; i++) {
l[i][0] = i;
}
for (int j = 1; (1 << j) <= N; j++) {
for (int i = 0; (i + (1 << j) - 1) < N ; i++) {
if (numbers[l[i][j - 1]] < numbers[l[i + (1 << (j - 1))][j - 1]]) {
l[i][j] = l[i][j - 1];
} else {
l[i][j] = l[i + (1 << (j - 1))][j - 1];
}
}
}
int left;
int right;
for (int i = 0; i < M; i++) {
in >> left >> right;
left--;
right--;
int j = (int)log2(right - left + 1);
int first = numbers[l[left][j]];
int second = numbers[l[right - (1 << j) + 1][j]];
out << min(first, second) << endl;
}
in.close();
out.close();
return 0;
}