Pagini recente » Cod sursa (job #129819) | Cod sursa (job #1549064) | Cod sursa (job #320466) | Arhiva de probleme | Cod sursa (job #432746)
Cod sursa(job #432746)
#include <cstdio>
int n,m;
int prep[20][100010];
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);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i)
scanf("%d",&prep[0][i]);
for (int j=1;1<<j<=n;++j)
for (int i=1;i+(1<<j)-1<=n;++i)
prep[j][i]=min(prep[j-1][i],prep[j-1][i+(1<<j-1)]);
int st,dr,i;
while (m--)
{
scanf("%d%d",&st,&dr);
int k=0;
while(1<<k<dr-st+1)
++k;
--k;
i=min(prep[k][st],prep[k][dr-(1<<k)+1]);
printf("%d\n",i);
}
return 0;
}