Pagini recente » Cod sursa (job #131480) | Istoria paginii runda/going_oni_prep | clasament-teme | Cod sursa (job #748087) | Cod sursa (job #998727)
Cod sursa(job #998727)
#include<stdio.h>
#include<math.h>
int d[30][100005],v[100005],p[30];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,l,a,b,c;
scanf("%d%d",&n,&m);
scanf("%d",&v[1]);
for(i=2;i<=n;i++)
{
scanf("%d",&v[i]);
if(v[i]<v[i-1])
d[i-1][0]=v[i];
else
d[i-1][0]=v[i-1];
}
l=log2(n);
p[0]=1;
for(j=1;j<=l;j++)
{
p[j]=p[j-1]*2;
for(i=1;i<=n-p[j];i++)
{
d[i][j]=d[i][j-1];
if(d[i+p[j-1]][j-1]<d[i][j])
d[i][j]=d[i+p[j-1]][j-1];
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(a==b)
printf("%d\n",v[a]);
else
{
c=log2(b-a);
if(d[a][c]<d[b-p[c]][c])
printf("%d\n",d[a][c]);
else
printf("%d\n",d[b-p[c]][c]);
}
}
return 0;
}