Pagini recente » Cod sursa (job #1408424) | Cod sursa (job #185382) | Cod sursa (job #1607664) | Cod sursa (job #3355133) | Cod sursa (job #3347676)
#include <fstream>
using namespace std;
int a[20][100004];
int v[100004];
int n;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
void construieste()
{
int contor=0;
for(int cnt=2;cnt<=n;cnt=cnt*2)
{
contor++;
int poz=1;
while(poz+(cnt/2)<=n)
{
a[contor][poz]=min(a[contor-1][poz],a[contor-1][poz+(cnt/2)]);
poz++;
}
}
}
int main()
{
int q;
cin>>n>>q;
for(int i=1; i<=n; i++)
{
cin>>v[i];
a[0][i]=v[i];
}
construieste();
for(int j=1;j<=q;j++)
{
int x,y,putere=0,l,aux=2;
cin>>x>>y;
if(x>y)
swap(x,y);
l=y-x+1;
while(aux<=l)
{
putere++;
aux=aux*2;
}
cout<<min(a[putere][x],a[putere][y-(aux/2)+1])<<'\n';
}
return 0;
}