Pagini recente » Cod sursa (job #2945478) | Cod sursa (job #2279118) | Cod sursa (job #3211257) | Cod sursa (job #2424717) | Cod sursa (job #1145686)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,q,m,i,St,Dr,Lg,lg,a[1<<17],x[18][1<<17];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++)
{
scanf("%d",&x[0][i]);
}
for(Lg=2,lg=1,m=1;Lg<=n;Lg<<=1,lg<<=1,m++)
for(St=1,Dr=Lg;Dr<=n;St++,Dr++)
x[m][St]=min(x[m-1][St],x[m-1][St+lg]);
for(i=2;i<=n;i<<=1)a[i]=1;
for(i=1;i<=n;i++)a[i]+=a[i-1];
for(;q;q--)
{
scanf("%d%d",&St,&Dr);
Lg=Dr-St+1;i=a[Lg];
lg=1<<i;
printf("%d\n",min(x[i][St],x[i][Dr-lg+1]));
}
return 0;
}