Pagini recente » Cod sursa (job #2483103) | Cod sursa (job #2777955) | Cod sursa (job #136873) | Cod sursa (job #241893) | Cod sursa (job #2902804)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long nrElem, nrQuery, i, j, stopJ, rmq[19][100000], st, dr, putere;
vector <int> rez;
int main()
{
fin >> nrElem >> nrQuery;
rez.assign(nrQuery, 0);
for (i = 0; i < nrElem; ++i)
fin >> rmq[0][i];
stopJ = floor(log2(nrElem))+1;
for (i = 1; i < stopJ; i++)
for (j = 0; j + (1 << i) <= nrElem; j++)
{
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1 << (i-1))]);
}
for (i = 0; i < nrQuery; i++)
{
fin >> st >> dr;
--st; --dr;
putere = floor(log2((dr-st+1)));
rez[i] = min(rmq[putere][st], rmq[putere][dr - (1 << putere)+1]);
}
/*
for (i = 0; i < 18; i++)
{
for (j = 0; j < nrElem; j++)
fout << rmq[i][j] << ' ';
fout << "\n linie noua \n";
}
/*/
for (auto i : rez)
fout << i << '\n';
return 0;
}