Pagini recente » Cod sursa (job #2291776) | Cod sursa (job #1310232) | Cod sursa (job #2703500) | Cod sursa (job #1212840) | Cod sursa (job #2902776)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int nrElem, nrQuery, i, j, stopJ, rmq[100000][18], st, dr, putere;
vector <int> nums;
vector <int> rez;
int main()
{
fin >> nrElem >> nrQuery;
nums.assign(nrElem, 0);
rez.assign(nrQuery, 0);
for (i = 0; i < nrElem; ++i)
{
fin >> nums[i];
rmq[0][i] = nums[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 < nrElem; i++)
{
for (j = 0; j < nrElem; j++)
fout << rmq[i][j] << ' ';
fout << '\n';
}
*/
for (auto i : rez)
fout << i << '\n';
return 0;
}