Pagini recente » Cod sursa (job #2496652) | Cod sursa (job #1153874) | Cod sursa (job #867503) | Cod sursa (job #1138343) | Cod sursa (job #1774821)
#include <cstdio>
#define min(a,b) a<b ? a : b
using namespace std;
int n,m,i,j,k,a[100010],log[100010],rmq[100010][20],doi[20];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
doi[0]=1;
for (i=1; i<=20; i++)
doi[i]=doi[i-1]*2;
log[1]=0;
for (i=2; i<=n; i++)
log[i]=log[i/2]+1;
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
for (i=1; i<=n; i++)
rmq[i][0]=a[i];
for (i=1; i<=log[n]; i++)
for (j=1; j<=n-doi[i]; j++)
rmq[j][i]=min(rmq[j][i-1],rmq[j+doi[i]-doi[i-1]][i-1]);
for (i=1; i<=m; i++)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",min(rmq[x][log[x-y]],rmq[y-doi[log[x-y]]+1][log[x-y]]));
}
}