Pagini recente » Cod sursa (job #987993) | Cod sursa (job #2477170) | Cod sursa (job #2114865) | Cod sursa (job #1639638) | Cod sursa (job #266959)
Cod sursa(job #266959)
#include <stdio.h>
#define Nmax 100200
#define Lmax 18
#define pow(q) (1<<(q))
//#define INF 10000
int n,m,b[Nmax][Lmax];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int x,y,i,j;
scanf("%d%d",&n,&m);
// for(i=n+1;i<Nmax;++i)b[i][0]=INF;
for(i=1;i<=n;++i)
scanf("%d",&b[i][0]);
for(j=1;pow(j)<=n;++j)
for(i=1;i<=n;++i)
{
b[i][j]=b[i][j-1];
if (i+pow(j-1)<=n && b[i][j] > b[i+pow(j-1)][j-1])
b[i][j] = b[i+pow(j-1)][j-1];
}
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
int log=0,dif=y-x+1;
while(pow(log+1)<=dif)
++log;
printf("%d\n",min(b[x][log],b[y-pow(log)+1][log]));
}
return 0;
}