Pagini recente » Cod sursa (job #2424101) | Cod sursa (job #2681378) | Cod sursa (job #1864537) | Istoria paginii runda/onis-2016-runda-finala/clasament | Cod sursa (job #2645929)
#include <bits/stdc++.h>
using namespace std;
class RMQ
{
int N, K;
vector<vector<int>> rmq;
public:
RMQ(vector<int>& data)
{
N = data.size() - 1;
K = log2(N);
rmq.resize(K + 1, vector<int>(N + 1));
for(int i = 1; i <= N; ++i)
rmq[0][i] = data[i];
for(int k = 1; k <= K; ++k)
for(int i = 1; i <= N; ++i)
rmq[k][i] = min(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);
}
int query(int left, int right)
{
if(left > right) swap(left, right);
int k = log2(right - left + 1);
return min(rmq[k][left], rmq[k][right - (1 << k) + 1]);
}
};
int main()
{
ifstream fin{"rmq.in"};
ofstream fout{"rmq.out"};
int N, M;
fin >> N >> M;
vector<int> v(N + 1);
for(int i = 1; i <= N; ++i)
fin >> v[i];
RMQ rmq(v);
for(int i = 1; i <= M; ++i)
{
int left, right;
fin >> left >> right;
fout << rmq.query(left, right) << '\n';
}
}