Pagini recente » Cod sursa (job #477842) | Cod sursa (job #3275965) | Cod sursa (job #1366015) | Cod sursa (job #2059658) | Cod sursa (job #883483)
Cod sursa(job #883483)
#include<stdio.h>
int N,M,b,c,d;
int mi(int x,int y)
{
if(x>y)
return y;
else
return x;
}
int a[100010],s[100010][20];
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",&a[i]);
int x=1;
int j=1;
for(int i=1;i<=N;++i)
s[i][0]=a[i];
while(x<=N)
{
for(int i=1;i<=N;++i)
{
if(i+x>N)
s[i][j]=s[i][j-1];
else
s[i][j]=mi(s[i][j-1],s[i+x][j-1]);
}
++j;
x=x*2;
b=j;
}
for(int i=1;i<=M;++i)
{
int rez=100000;
scanf("%d%d",&c,&d);
int e=d-c+1;
while(e>0)
{
int t=0;
int z=1;
while(z<=e)
{
++t;
z=2*z;
}
t=t-1;
z=z/2;
rez=mi(rez,s[c][t]);
e=e-z;
c=c+z;
}
printf("%d\n",rez);
}
return 0;
}