Pagini recente » Cod sursa (job #765876) | Cod sursa (job #1541300) | Cod sursa (job #1801092) | Cod sursa (job #2404093) | Cod sursa (job #2376741)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int a[100001], rmq[100001][25];
int n, m;
void Read()
{
fin >> n >> m;
for(int i = 0; i < n; i++)
fin >> a[i];
}
void BuildRMQ()
{
for(int i = 0; i < n; i++)
rmq[i][0] = i;
for(int j = 1; (1 << j) <= n; j++)
for(int i = 0; i + (1 << j) - 1 < n; i++)
if(a[rmq[i][j - 1]] < a[rmq[i + (1 << (j - 1) )][j - 1]])
rmq[i][j] = rmq[i][j - 1];
else
rmq[i][j] = rmq[i + (1 << (j - 1) )][j - 1];
}
int QueryRMQ(int low, int high)
{
int l = high - low + 1;
int k = log2(l);
return min(a[rmq[low][k]] , a[rmq[low + l - (1 << k )][k]]);
}
int main()
{
Read();
BuildRMQ();
int x, y;
for(int i = 1; i <= m; i++)
{
fin >> x >> y;
fout << QueryRMQ(x - 1, y - 1) << "\n";
}
return 0;
}