Pagini recente » Cod sursa (job #2028194) | Cod sursa (job #2664272) | Cod sursa (job #1764380) | Cod sursa (job #2903355) | Cod sursa (job #3134254)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
vector<vector<int>> proc_RMQ(const vector<int> &input) {
int N = input.size();
int logN = log2(N) + 1;
vector<vector<int>> RMQmatrice(N, vector<int>(logN, 0));
for (int i = 0; i < N; i++) {
RMQmatrice[i][0] = input[i];
}
for (int j = 1; (1 << j) <= N; j++) {
for (int i = 0; (i + (1 << j) - 1) < N; i++) {
RMQmatrice[i][j] = min(RMQmatrice[i][j - 1], RMQmatrice[i + (1 << (j - 1))][j - 1]);
}
}
return RMQmatrice;
}
int RmQquery(const vector<vector<int>> &rmqTable, int x, int y) {
int k = log2(y - x + 1);
return min(rmqTable[x][k], rmqTable[y - (1 << k) + 1][k]);
}
int main() {
ifstream f1("../rmq.in");
ofstream f2("../rmq.out");
int N, M;
f1 >> N >> M;
vector<int> input(N);
for (int i = 0; i < N; i++) {
f1 >> input[i];
}
vector<vector<int>> rmqTable = proc_RMQ(input);
while (M--) {
int x, y;
f1 >> x >> y;
int min_el = RmQquery(rmqTable, x - 1, y - 1);
f2 << min_el << endl;
}
f1.close();
f2.close();
return 0;
}