Pagini recente » Cod sursa (job #81432) | Cod sursa (job #2677583) | Cod sursa (job #1031668) | Rating Aatrox Darkin (Aatroxenn) | Cod sursa (job #1502279)
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
vector <vector <int> > rmq;
vector <int> p2max;
void make_p2max()
{
const int lim = 100005;
p2max.push_back(0); p2max.push_back(0);
for (int i = 2; i < lim; ++i)
p2max.push_back(p2max[i / 2] + 1);
}
void make_rmq()
{
for (int i = 1; (1 << i) < n; ++i)
{
rmq.push_back(*new vector<int>);
//rmq[i].reserve(n + 5);
for (int j = 0; j + (1 << i) - 1 < n; ++j)
rmq[i].push_back(min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]));
//rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
}
int query(int x, int y)
{
int imax = p2max[y - x];
return min(rmq[imax][x], rmq[imax][y - (1 << imax) + 1]);
}
int main()
{
int x, y;
fin >> n >> m;
rmq.push_back(*new vector<int>);
for (int i = 0; i < n; ++i)
{
fin >> x;
rmq[0].push_back(x);
}
make_p2max();
make_rmq();
for (int i = 0; i < m; ++i)
{
fin >> x >> y;
fout << query(x - 1, y - 1) << '\n';
}
return 0;
}