Pagini recente » Cod sursa (job #1374795) | Cod sursa (job #1337362) | Cod sursa (job #414424) | Cod sursa (job #1783218) | Cod sursa (job #2810946)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int maxLog = 32;
const int maxN = 1e5 + 5;
int log[maxN];
int rmq[maxLog][maxN];
int a[maxN];
void precalculare_log (int n) {
log[1] = 0;
for(int i = 2; i <= n; ++i)
log[i] = log[i/2] + 1;
}
void build_rmq (int n) {
for(int i = 1; i <= n; ++i)
rmq[0][i] = a[i];
for(int step = 1; step <= log[n]; ++step)
for(int i = 1; i <= n - (1 << step) + 1; ++i)
rmq[step][i] = min(rmq[step-1][i],
rmq[step-1][i + (1 << (step-1))]);
}
int main()
{
int n, m; fin >> n >> m;
for(int i = 1; i <= n; ++i)
fin >> a[i];
precalculare_log(n);
build_rmq(n);
for(int k = 1; k <= m; ++k) {
int st, dr; fin >> st >> dr;
int dist = dr - st + 1;
fout << min(rmq[log[dist]][st],
rmq[log[dist]][dr - (1 << log[dist]) + 1]) << '\n';
}
return 0;
}