Pagini recente » Cod sursa (job #598636) | Cod sursa (job #2088392) | Cod sursa (job #1490944) | Cod sursa (job #2426791) | Cod sursa (job #1510399)
#include <cstdio>
int n,m,i,j,k,a[100003],b[100003],dp[17][100003],log[100003],p[19],x,y;
inline int minim(int xx, int yy)
{
if(xx<yy)return xx;
return yy;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
p[0]=1;
while(p[i-1]*2<=n)
{
i++;
p[i]=p[i-1]*2;
}
for(i=1;i<=n;i++)
{
if(p[log[i-1]+1]==i)log[i]=log[i-1]+1;
else log[i]=log[i-1];
}
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
dp[0][i]=a[i];
for(i=1;i<=log[n];i++)
{
for(j=1;j<=n;j++)
{
dp[i][j]=minim(dp[i-1][j], dp[i-1][j+p[i-1]]);
}
}
/* for(i=0;i<=log[n];i++)
{
for(j=1;j<=n;j++)
printf("%d ",dp[i][j]);
printf("\n");
}*/
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
k=log[y-x];
printf("%d\n",minim(dp[k][x],dp[k][y-p[k]+1]));
}
return 0;
}