Pagini recente » Cod sursa (job #589228) | Cod sursa (job #1971286) | Cod sursa (job #1812756) | Cod sursa (job #1321222) | Cod sursa (job #2166389)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
vector<int> t[100001];
int put[65];
void pre()
{
int k = 1, i;
put[0] = 1;
for (i = 2; i <= n; i <<= 1)
{
put[k++] = i;
for (int j = 0; j + i - 1 < n; j++)
t[j].push_back(min(t[j].back(), t[j + i - 1].back()));
}
put[k] = i;
}
int query(int x, int y)
{
int k = 0, dif = y - x + 1;
while (put[k + 1] <= dif) k++;
return min(t[x][k], t[y - put[k] + 1][k]);
}
int main()
{
int x, y;
fin >> n >> m;
for (int i = 0; i < n; i++)
{
fin >> x;
t[i].push_back(x);
}
pre();
while (m--)
{
fin >> x >> y;
fout << query(x - 1, y - 1) << '\n';
}
}