Pagini recente » Cod sursa (job #478836) | Cod sursa (job #1409487) | Cod sursa (job #1366562) | Cod sursa (job #3261768) | Cod sursa (job #311780)
Cod sursa(job #311780)
#include<stdio.h>
#include<math.h>
int a[100001],rm[20][100001],i,n,m,t[100001];
int min(int c,int v)
{ if(c<v)
return c;
return v;
}
void constr()
{ int l=1;
for(i=1;(1<<i)<=n;i++)
for(int j=1;j<=n-(1<<i)+1;j++)
{ l=1<<(i-1);
rm[i][j]=min(rm[i-1][j],rm[i-1][j+l]);
}
}
void query(int q,int w)
{ int d=w-q+1;
int te=t[d];
int p=1<<te;
printf("%d\n",min(rm[te][q],rm[te][w-p+1]));
}
int main()
{ freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]);
rm[0][i]=a[i];
}
for(i=2;i<=n;i++)
t[i]=t[i/2]+1;
constr();
for(i=1;i<=m;i++)
{ int x,y;
scanf("%d%d",&x,&y);
query(x,y);
}
return 0;
}