Pagini recente » Cod sursa (job #1300353) | Cod sursa (job #2500872) | Cod sursa (job #2246333) | Cod sursa (job #2669198) | Cod sursa (job #2536070)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 100005;
const int P = 20;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[P][N], lg[N];
int n, m;
void precompute()
{
lg[1] = 0;
for(int i = 2; i < N; i++)
lg[i] = lg[i / 2] + 1;
for(int p = 1; (1 << p) <= n; p++)
{
for(int i = 0; i + (1 << p) <= n; i++)
{
rmq[p][i] = min(rmq[p-1][i], rmq[p-1][i + (1 << (p-1))]);
}
}
}
int solveQuery(int l, int r)
{
int dist = r - l + 1;
int p = lg[dist];
return min(rmq[p][l], rmq[p][r - (1 << p) + 1]);
}
int main()
{
fin >> n >> m;
for(int i = 0; i < n; i++)
fin >> rmq[0][i];
precompute();
while(m--)
{
int l, r;
fin >> l >> r;
l--; r--;
fout << solveQuery(l, r) << '\n';
}
return 0;
}