Pagini recente » Cod sursa (job #230982) | Cod sursa (job #3211399) | Cod sursa (job #205986) | Cod sursa (job #3323920) | Cod sursa (job #3354472)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <stack>
#include <string>
#include <random>
#include <unordered_set>
#include <set>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void buildSparseTable(vector<vector<int>>& table, vector<int>& arr, int& n, int& maxpow) {
for (int i = 0; i < n; i++) {
table[0][i] = arr[i];
}
for (int i = 1; i <= maxpow; i++) {
int length = 1 << i;
int offset = 1 << (i - 1);
for (int j = 0; j + length <= n; j++) {
table[i][j] = min(table[i-1][j], table[i-1][j + offset]);
}
}
}
int query(int l, int r, vector<vector<int>>& table) {
int len = r - l + 1;
int k = floor(log2(len));
return min(table[k][l], table[k][r - (1 << k) + 1]);
}
int main() {
int n, m;
fin >> n >> m;
vector<int> arr;
int x;
for (int i = 0; i < n; i++) {
fin >> x;
arr.push_back(x);
}
int maxpow = floor(log2(n));
vector<vector<int>> table(maxpow + 1, vector<int>(n, 0));
buildSparseTable(table, arr, n, maxpow);
int l, r;
for (int i = 0; i < m; i++) {
fin >> l >> r;
fout << query(l - 1,r - 1,table) << endl;
}
}