Pagini recente » Cod sursa (job #1080700) | Cod sursa (job #1668889) | Cod sursa (job #1252697) | Cod sursa (job #411558) | Cod sursa (job #1763813)
#include<bits/stdc++.h>
using namespace std;
int n,m,rmq[20][100005],ind,minim,loga[100005],x,y,d,lung;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&rmq[0][i]);
}
int p=1;
int l=0;
while(p<n) p<<=1,l++;
for(int i=1;i<=l;i++)
{
for(int j=1;j<=n;j++)
{
ind=j+(1<<(i-1));
rmq[i][j]=rmq[i-1][j];
if (ind<=n) rmq[i][j]=min(rmq[i][j],rmq[i-1][ind]);
}
}
loga[1]=0;
for(int i=2;i<=n;i++) loga[i]=loga[i/2]+1;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
d=y-x+1;
lung=loga[d];
minim=min(rmq[lung][x],rmq[lung][y-(1<<lung)+1]);
printf("%d\n",minim);
}
return 0;
}