Pagini recente » Cod sursa (job #1471530) | Cod sursa (job #795854) | Cod sursa (job #50912) | Cod sursa (job #2288919) | Cod sursa (job #3330731)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector<int>lg;
vector<vector<int>>m;
vector<int>v;
int n, q;
int x, y, k;
int main()
{
fin >> n >> q;
v.resize(n + 1);
lg.resize(n + 1);
for (int i = 1; i <= n; i++)
fin >> v[i];
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
m.resize(lg[n] + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++)
m[0][i] = v[i];
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j + (1 << i) <= n + 1; j++)
m[i][j] = min(m[i - 1][j], m[i - 1][j + (1 << (i - 1))]);
for (int i = 1; i <= q; i++)
{
fin >> x >> y;
k = lg[y - x + 1];
fout << min(m[k][x], m[k][y - (1 << k)+1]) << '\n';
}
return 0;
}