Pagini recente » Cod sursa (job #2058399) | Cod sursa (job #1340228) | Cod sursa (job #710184) | Cod sursa (job #178061) | Cod sursa (job #2010797)
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
short int a[17][100005],v[22]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16.384,32.768,65.536},b[100006];
int cautbin(int x)
{
int left=0,right=16,mid,sol=-1;
while(left<=right)
{
mid=(left+right)/2;
if(x>=v[mid])
{
sol=mid;
left=mid+1;
}
else
right=mid-1;
}
return sol;
}
int main()
{
int n,i,x,y,z,k=1,m;
fin>>n>>m;
for(i=0;i<n;i++)
{
fin>>x;
b[i]=x;
if(i!=0)
a[0][i]=min(x,y);
y=x;
}
z=4;
k=1;
while(z<=n)
{
for(i=1;i<=n-z+1;i++)
{
a[k][i]=min(a[k-1][i],a[k-1][i+z/2]);
}
k++;
z=z*2;
}
for(i=1;i<=m;i++)
{
fin>>x>>y;
z=cautbin(y-x+1);
if(z!=0)
fout<<min(a[z-1][x],a[z-1][y-v[z]+1])<<'\n';
else
fout<<b[x-1];
}
}