Pagini recente » Cod sursa (job #2671325) | Cod sursa (job #2562488) | Cod sursa (job #725870) | Cod sursa (job #191871) | Cod sursa (job #3226764)
#include <fstream>
const int NMAX=100005;
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int query(int, int);
int rmq[20][NMAX], pw[NMAX];
int n, q;
int main()
{
int p=0, i, j, a, b;
cin>>n>>q;
for(i=1; i<=n; i++)
{
cin>>rmq[0][i];
if((1<<(p+1))==i) p++;
pw[i]=p;
}
for(j=1; (1<<j)<=n; j++)
{
for(i=1; i<=n-(1<<j)+1; i++)
{
rmq[j][i]=min(rmq[j-1][i], rmq[j-1][i+(1<<(j-1))]);
}
}
while(q--)
{
cin>>a>>b;
cout<<query(a, b)<<'\n';
}
return 0;
}
int query(int a, int b)
{
int p=pw[b-a+1];
return min(rmq[p][a], rmq[p][b-(1<<p)+1]);
}