Pagini recente » Rating Andrei Lecu (Andreil) | Cod sursa (job #1996265) | Cod sursa (job #1608845) | Cod sursa (job #3201741) | Cod sursa (job #1290643)
#include <bits/stdc++.h>
using namespace std;
int rmq[18][100010],n,m,i,lg,x,y,a[100010],lvl,l,r;
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",&rmq[0][i]);
for(lg=1,lvl=1;lg<=n;lg<<=1,lvl++)
for(l=1,r=(lg<<1);r<=n;r++,l++)
rmq[lvl][l]=min(rmq[lvl-1][l],rmq[lvl-1][l+lg]);
for(i=2;i<=n;i<<=1)a[i]=1;
for(i=1;i<=n;i++)a[i]+=a[i-1];
for(;m;m--)
{
scanf("%d%d",&x,&y);
lg=y-x+1;
lvl=a[lg];
printf("%d\n",min(rmq[lvl][x],rmq[lvl][y-(1<<lvl)+1]));
}
return 0;
}