Pagini recente » Cod sursa (job #1075731) | Cod sursa (job #2309341) | Monitorul de evaluare | Cod sursa (job #2197768) | Cod sursa (job #1011657)
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<=b;++i)
#define N 100002
#define ll long long int
int n,m;
int rmq[20][N];
int lg[N];
int t[N];
int MIN(int a,int b)
{
return a<b?a:b;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int l;
scanf("%d %d",&n,&m);
fr(i,1,n) scanf("%d\n",&t[i]);
lg[1]=0;
fr(i,2,n) lg[i]=lg[i/2]+1;
fr(i,1,n) rmq[0][i]=t[i];
fr(i,1,(1<<i))
fr(j,1,n-(1<<i)+1)
{
l=1<<(i-1);
rmq[i][j]=MIN(rmq[i-1][j],rmq[i-1][j+1]);
}
int x,y,dif,s;
fr(i,1,m)
{
scanf("%d %d",&x,&y);
dif=y-x+1;
l=lg[dif];
s=dif-(1<<l);
printf("%d\n",MIN(rmq[l][x],rmq[l][x+s]));
}
}