Pagini recente » Cod sursa (job #1787192) | Cod sursa (job #1436812) | Cod sursa (job #3192418) | Cod sursa (job #159244) | Cod sursa (job #2834181)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int N_MAX = 100005 , LOG = 17;
int m[N_MAX][LOG] , q , n , l , r , x;
int solve (int l , int r)
{
int lungime = r - l + 1 , k = 0;
while (1 << (k + 1) <= lungime) k = k + 1;
return min(m[l][k] , m[r - (1 << k) + 1][k]);
}
int main()
{
fin >> n >> q;
for (int i=1; i<=n; i++)
{
fin >> x;
m[i][0] = x;
}
for (int j=1; j<LOG; j++)
{
for (int i=1; i + (1 << j) - 1 <=n; i++) m[i][j] = min(m[i][j - 1] , m[i + (1 << (j - 1))][j - 1]);
}
while (q--)
{
fin >> l >> r;
fout << solve(l , r) << '\n';
}
}