Pagini recente » Cod sursa (job #2860187) | Cod sursa (job #1477599) | Cod sursa (job #361849) | Cod sursa (job #291696) | Cod sursa (job #2372111)
#include <bits/stdc++.h>
#define dim 100003
#define dim1 22
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int v[dim];
int dp[dim1][dim];
int getint(bool c, int n)
{
int lg = log(n) / log(2);
if (c == 0 && (1 << lg) < n)
lg++;
return lg;
}
int main ()
{
int n, m;
in >> n >> m;
int lg = getint ( 0, n );
for (int i = 0; i < n; i++)
in >> v[i];
for (int i = 0; i <= lg; i++)
for (int j = 0; j < n; j++)
dp[i][j] = INT_MAX;
for (int i = 0; i < n; i++)
dp[0][i] = v[i];
for (int i = 1; i <= lg; i++)
for (int j = 0; j + (1 << i) - 1 < n; j++)
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
for ( ; m > 0; m-- )
{
int st, dr;
in >> st >> dr;
st--;
dr--;
int poz = getint(1, dr - st + 1);
out << min(dp[poz][st], dp[poz][dr - (1 << poz) + 1]) << '\n';
}
return 0;
}