Pagini recente » Cod sursa (job #2568253) | Cod sursa (job #1640572) | Profil stay_awake77 | Cod sursa (job #1338086) | Cod sursa (job #1932042)
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int n, m;
int mat[20][100005];
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++)
{
scanf("%d", &mat[0][i]);
}
}
void solve()
{
int lg = (int)log2(n);
for(int i = 1; i <= lg; i++)
{
for(int j = 0; j < n; j++)
{
int poz = j + (1 << (i - 1));
if(poz < n)
{
mat[i][j] = min(mat[i - 1][j], mat[i - 1][poz]);
}
else
{
mat[i][j] = mat[i - 1][j];
}
}
}
}
int citireSolveTest()
{
int st, dr;
scanf("%d %d", &st, &dr);
st--;
dr--;
int l = (dr - st) + 1;
int lgl = (int)log2(l);
return min(mat[lgl][st], mat[lgl][dr - (1 << lgl) + 1]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
citire();
solve();
for(int k = 0; k < m; k++)
{
printf("%d\n", citireSolveTest());
}
}