Pagini recente » Cod sursa (job #1435334) | Cod sursa (job #2848433) | Cod sursa (job #262507) | Cod sursa (job #1227469) | Cod sursa (job #2292809)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int putere(int exp) {
int x = 1 << exp;
return x;
}
vector<int> v;
vector< pair<int, int> > queries;
int N, M, x, y, a[100010][20], ln;
int main()
{
fin >> N >> M;
for (int i = 0; i < N; i++) {
fin >> x;
v.push_back(x);
}
for (int i = 0; i < M; i++) {
fin >> x >> y;
queries.push_back(make_pair(x, y));
}
for (int i = 0; i < N - 1; i++) {
a[i][0] = min(v[i], v[i + 1]);
}
ln = log2(N);
for (int j = 1; j <= ln; j++) {
for (int i = 0 ; i < (N - (1 << j)); i++) {
a[i][j] = min(a[i][j - 1], a[1 << (j - 1) + i][j - 1]);
}
}
for (int i = 0; i < M; i++) {
int f, l, k;
f = queries[i].first - 1;
l = queries[i].second - 1;
k = log2(l - f);
if (f == l)
fout << v[l] << endl;
else
fout << min(a[f][k], a[l- (1 << k)][k]) << endl;
}
return 0;
}