Pagini recente » Cod sursa (job #621031) | Cod sursa (job #1035559) | Cod sursa (job #1612372) | Cod sursa (job #2989732) | Cod sursa (job #156833)
Cod sursa(job #156833)
#include <stdio.h>
#define NM 100001
#define logNM 18
#define min(a,b) (a<b?a:b)
long a[NM][logNM];
int p2[NM];
int main()
{ long n,m;
freopen("rmq.in","rt",stdin);
freopen("rmq.out","wt",stdout);
scanf("%ld %ld",&n,&m);
long i,j,x,y,put2,minim,dif,k=0;
for (i=1;i<=n;i++) scanf("%ld",&a[i][0]);
for (i=1;i<=n;i++)
if (i==1<<k)
{ p2[i]=k;
k++;
}
else p2[i]=p2[i-1];
for (j=1;(1<<j)<=n;j++)
for (i=1;i<=n-(1<<j)+1;i++)
a[i][j]=min(a[i][j-1],a[i+(1<<j-1)][j-1]);
for (i=1;i<=m;i++)
{ scanf("%ld %ld",&x,&y);
put2=p2[y-x+1];
minim=min(a[x][put2],a[y-(1<<put2)+1][put2]);
printf("%ld\n",minim);
}
fcloseall();
return 0;
}