Pagini recente » Cod sursa (job #2731757) | Cod sursa (job #2320223) | Cod sursa (job #1023266) | Cod sursa (job #1334571) | Cod sursa (job #311778)
Cod sursa(job #311778)
#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++)
{ rm[i][j]=min(rm[i-1][j],rm[i-1][j+l]);
l=1<<(i-1);
}
}
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;
}