Pagini recente » Cod sursa (job #514607) | Cod sursa (job #513493) | Cod sursa (job #1863811) | Cod sursa (job #706381) | Cod sursa (job #2769297)
#include <fstream>
#include <cmath>
int vec[18][100005];
int main()
{
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int nrn, nrm, nr1, nr2;
int sav;
fin >> nrn >> nrm;
for (int index = 0; index < nrn; index++) {
fin >> vec[0][index];
}
for (int index = 0; 1 << (index + 1) <= nrn; index++) {
for (int index2 = 0; index2 <= nrn - (1 << index); index2++) {
vec[index + 1][index2] = std::min(vec[index][index2], vec[index][index2 + (1 << index)]);
}
}
for (int index = 0; index < nrm; index++) {
fin >> nr1 >> nr2;
nr1--;
nr2--;
sav = -1;
for (int dif = nr2 - nr1 + 1; dif; dif >>= 1, sav++);
fout << std::min(vec[sav][nr1], vec[sav][nr2 - (1 << sav) + 1]) << '\n';
}
}