Pagini recente » Cod sursa (job #335022) | Cod sursa (job #1641472) | Cod sursa (job #2621954) | Cod sursa (job #58140) | Cod sursa (job #338958)
Cod sursa(job #338958)
#include <stdio.h>
#include <algorithm>
using namespace std;
long int log[100001];
long int rmq[20][100001];
long int a[100001];
long int i,j,n,l,pas,x,y,t;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld %ld",&n,&t);
for (i=1; i<=n; i++)
{
scanf("%ld",&a[i]);
rmq[0][i]=a[i];
}
for (i=2; i<=n; i++)
log[i]=log[i/2]+1;
for (i=1; (1 << i)<=n; i++)
for (j=1; j<=n-(1 << i)+1; j++)
rmq[i][j]= min(rmq[i-1][j], rmq[i-1][j+ (1 << (i-1))]);
while (t){
t--;
scanf("%ld %ld",&x,&y);
l=log[y-x+1];
pas=y+1-(1 << l);
printf("%ld\n",min(rmq[l][x], rmq[l][pas]));
}
fclose(stdin); fclose(stdout);
return 0;
}