Pagini recente » Cod sursa (job #473980) | Cod sursa (job #3206848) | Cod sursa (job #390703) | Cod sursa (job #403655) | Cod sursa (job #3264838)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[100005];
int d[100005][25];
int lg[100005];
int main()
{
int n, m;
lg[1] = 0;
for(int i = 2; i <= 100000; i++)
lg[i] = lg[(i >> 1)] + 1;
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> v[i];
for(int i = 1; i <= n; i++)
{
if(i == n)
d[i][0] = v[i];
else
d[i][0] = min(v[i], v[i+1]);
}
for(int k = 1; k <= 20; k++)
{
for(int i = 1; i <= n; i++)
{
if(i + (1 << (k-1)) <= n)
d[i][k] = min(d[i][k-1], d[i + (1 << (k-1))][k-1]);
else
d[i][k] = d[i][k-1];
}
}
for(int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
if(x != y)
{
int o = y - (1 << (lg[y - x]));
cout << min(d[x][lg[y - x]], d[o][lg[y - x]]) << "\n";
}
else
{
cout << v[x] << "\n";
}
}
}