Pagini recente » Cod sursa (job #2011678) | Cod sursa (job #2279570) | Cod sursa (job #1873458) | Cod sursa (job #854447) | Cod sursa (job #2885532)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int NMAX = 3e5+5, LOGMAX = 20;
int rmq[LOGMAX][NMAX];
void init_rmq(int n)
{
for(int log = 1; log < LOGMAX; log++)
{
for(int i = 0; i + (1 << log) <= n; i++)
rmq[log][i] = min(rmq[log - 1][i], rmq[log - 1][i + (1 << log) / 2]);
}
}
int get_rmq(int a, int b) // indexat de la 1
{
int d = b - a + 1;
int l = 31 - __builtin_clz(d);
return min(rmq[l][a - 1], rmq[l][b - (1 << l)]);
}
int main()
{
long long n,i,q;
cin>>n >> q;
for(i=1;i<=n;i++)
cin>>rmq[0][i-1];
init_rmq(n);
for(i=1;i<=q;i++)
{
int a,b;
cin >> a >> b;
cout << get_rmq(a, b) << '\n';
}
return 0;
}