Pagini recente » Cod sursa (job #409292) | Cod sursa (job #796974) | Cod sursa (job #1898209) | Cod sursa (job #706813) | Cod sursa (job #3204719)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int nmax = 100000;
int n, m, v[100000 + 5], x, y, dp[100000 + 5][20], log[nmax + 5];
int main()
{
int i, j, l;
log [1] = 0;
cin >> n >> m;
for ( i = 1; i <= n; ++i )
cin >> v[i];
for ( i = 2; i <= nmax; ++i )
log[i] = log[i / 2] + 1;
for ( i = 1; i <= n; ++i )
for ( j = 0; j <= log[n]; ++j )
if (j == 0)
dp[i][j] = v[i];
else
dp[i][j] = min( dp[i][j - 1], dp[i - (1 << (j - 1))][j - 1]);
for (i = 1; i <= m; ++i )
{
cin >> x >> y;
l = log[y - x + 1];
int rasp = min(dp[y][l], dp[x + (1 << l) - 1][l]);
cout << rasp << endl;
}
return 0;
}