Pagini recente » Cod sursa (job #2756466) | Cod sursa (job #2163886) | Cod sursa (job #546936) | Cod sursa (job #1540731) | Cod sursa (job #3134433)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
int n, m;
f >> n >> m;
vector<int> p2(n + 1);
p2[1] = 0;
for (int i = 2; i <= n; i++)
{
p2[i] = p2[i / 2] + 1;
}
vector<vector<int>> mini(17, vector<int>(n + 1));
for (int i = 1; i <= n; i++)
{
f >> mini[0][i];
}
for (int j = 1; (1 << j) <= n; j++)
{
int intv = 1 << j;
for (int i = 1; i + intv - 1 <= n; i++)
{
int left = mini[j - 1][i];
int right = mini[j - 1][i + (intv >> 1)];
mini[j][i] = min(left, right);
}
}
for (int i = 1; i <= m; i++)
{
int st, dr;
f >> st >> dr;
int l = dr - st + 1;
int aux = p2[l];
int rez = min(mini[aux][st], mini[aux][dr - (1 << aux) + 1]);
g << rez << endl;
}
f.close();
g.close();
return 0;
}