Pagini recente » Cod sursa (job #643332) | Cod sursa (job #2515581) | Cod sursa (job #2325609) | Cod sursa (job #2999602) | Cod sursa (job #3134374)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
ifstream inputFile("rmq.in");
ofstream outputFile("rmq.out");
int n, m;
inputFile >> n >> m;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
inputFile >> arr[i];
}
int logN = log2(n) + 1;
vector<vector<int>> rmq(logN, vector<int>(n));
for (int i = 0; i < n; i++) {
rmq[0][i] = arr[i];
}
for (int j = 1; j < logN; j++) {
for (int i = 0; i + (1 << j) <= n; i++) {
rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][i + (1 << (j - 1))]);
}
}
for (int i = 0; i < m; i++) {
int st, dr;
inputFile >> st >> dr;
st--;
dr--;
int len = dr - st + 1;
int k = log2(len);
int answer = min(rmq[k][st], rmq[k][dr - (1 << k) + 1]);
outputFile << answer << endl;
}
inputFile.close();
outputFile.close();
return 0;
}