Pagini recente » Cod sursa (job #142097) | Cod sursa (job #235134) | Cod sursa (job #2964473) | Cod sursa (job #1291478) | Cod sursa (job #2724036)
#include <fstream>
#include <cmath>
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int *rmq[17];
int n, q;
int minim(int st, int dr)
{
int i = (int)log2(dr - st + 1);
return std::min(rmq[i][st], rmq[i][dr - (1 << i) + 1]);
}
int main()
{
fin >> n >> q;
for(int i = 0; i <= 16 && n - (1 << i) + 1 > 0; i++)
rmq[i] = new int[n - (1 << i) + 2];
for(int j = 1; j <= n; j++)
fin >> rmq[0][j];
for(int i = 1, maxI = (int)log2(n), l = 1; i <= maxI; i++, l *= 2)
for(int j = 1; j <= n - l * 2 + 1; j++)
rmq[i][j] = std::min(rmq[i - 1][j], rmq[i - 1][j + l]);
for(int k = 1, st, dr; k <= q; k++)
{
fin >> st >> dr;
fout << minim(st, dr) << '\n';
}
return 0;
}