Pagini recente » Cod sursa (job #1383076) | Cod sursa (job #1991133) | Cod sursa (job #1732728) | Cod sursa (job #2403791) | Cod sursa (job #1052949)
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[18][100001],x,y;
int min(int x,int y)
{
if(x<y)
return x;
else
return y;
}
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",&a[0][i]);
int di=(1<<1);
for(int i=1;di<=n;)
{
for(int j=1;j+di-1<=n;j++)
a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
i++;
di=(1<<i);
}
for(int i=1;i<=m;i++)
{ scanf("%d%d",&x,&y);
int k=0;
while((1<<k)<=y-x)k++;
if(k>0)k--;
int mm=min(a[k][x],a[k][y-(1<<k)+1]);
printf("%d\n",mm);
}
return 0;
}