Pagini recente » Cod sursa (job #565671) | Cod sursa (job #1266609) | Cod sursa (job #238103) | Cod sursa (job #1287459) | Cod sursa (job #1443021)
#include <fstream>
#include <cmath>
#define NMAX 100000
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long n,m,power2,i,j,k,inc,sf;
int a[NMAX],mat[NMAX+1][20];
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
for(i=1;i<=n;i++)
mat[i][0]=i;
for(j=1; (1<<j) <n;j++)
{
power2=(1<<j);
for(i=1;i<=n-power2+1;i++)
if(a[mat[i][j-1]]<=a[mat[i+power2/2][j-1]])
mat[i][j]=mat[i][j-1];
else
mat[i][j]=mat[i+power2/2][j-1];
}
for(i=1;i<=m;i++)
{
fin>>inc>>sf;
k= log2 (sf-inc+1);
if(a[mat[inc][k]]<=a[mat[sf-(1<<k)+1][k]])
fout<<a[mat[inc][k]];
else
fout<<a[mat[sf-(1<<k)+1][k]];
fout<<'\n';
}
return 0;
}