Pagini recente » Cod sursa (job #1207145) | Cod sursa (job #2900640) | Cod sursa (job #2285845) | Cod sursa (job #795884) | Cod sursa (job #1122064)
#include <cstdio>
const int Q=100005;
int log[Q],v[Q],rmq[20][Q];
int n,t;
int inline min(int x, int y)
{
return x<y ? x : y;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&t);
for(int i=1; i<=n; i++)
{
scanf("%d",&v[i]);
}
rmq[0][1]=v[1];
for(int i=2; i<=n; i++)
{
log[i]=1+log[i/2];
rmq[0][i]=v[i];
}
for(int i=1; 1<<i <=n; i++)
{
for(int j=1; j<=n-(1<<i)+1; j++)
{
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
}
}
int st,dr,dif,lg;
for(int i=1; i<=t; i++)
{
scanf("%d %d",&st,&dr);
dif=dr-st+1;
lg=log[dif];
printf("%d\n",min(rmq[lg][st], rmq[lg][dr-(1<<lg)+1] ) );
}
return 0;
}