Pagini recente » Cod sursa (job #346745) | Cod sursa (job #229528) | Cod sursa (job #300836) | Cod sursa (job #365837) | Cod sursa (job #157899)
Cod sursa(job #157899)
#include <stdio.h>
#define NM 100001
#define logNM 18
int a[logNM][NM];
int p2[NM];
inline int min(int x,int y)
{ if (x<y) return x;
return y;
}
int main()
{ int n,m;
freopen("rmq.in","rt",stdin);
freopen("rmq.out","wt",stdout);
scanf("%d %d",&n,&m);
int i,j,x,y,put2,dif;
for (i=1;i<=n;i++) scanf("%d",&a[0][i]);
p2[1]=0;
for (i=2;i<=n;i++) p2[i]=p2[i/2]+1;
for (j=1;(1<<j)<=n;j++)
for (i=1;i<=n-(1<<j)+1;i++)
a[j][i]=min(a[j-1][i],a[j-1][i+(1<<j-1)]);
for (i=1;i<=m;i++)
{ scanf("%d %d",&x,&y);
put2=p2[y-x+1];
dif=1<<put2;
printf("%d\n",min(a[put2][x],a[put2][y-dif+1]));
}
fcloseall();
return 0;
}