Pagini recente » Cod sursa (job #1870142) | Cod sursa (job #1666160) | Cod sursa (job #2164088) | Cod sursa (job #902588) | Cod sursa (job #338952)
Cod sursa(job #338952)
#include <stdio.h>
int log[100000];
int rmq[20][100000];
int a[100000];
int i,j,n,l,pas,x,y,t;
inline int min(int x, int y)
{
if (x<y) return x;
return y;
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d\n%d",&n,&t,&a[1]);
rmq[0][1]=a[1];
for (i=2; i<=n; i++)
{
scanf("%d",&a[i]);
log[i]=log[i >> 1]+1;
rmq[0][i]=a[i];
}
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("%d %d",&x,&y);
l=log[y-x+1];
pas=y+1-(1 << l);
printf("%d\n",min(rmq[l][x], rmq[l][pas]));
}
fclose(stdin); fclose(stdout);
return 0;
}