Pagini recente » Cod sursa (job #981358) | Cod sursa (job #3138158) | Cod sursa (job #2976538) | Cod sursa (job #2445480) | Cod sursa (job #1800049)
#include <stdio.h>
#define LOG log[b-a+1]
int d[100001][17], log[17];
inline int min(int a,int b){
return a<b ? a:b;
}
int main()
{
int n, m, i, a, b, j;
FILE *fi=fopen("rmq.in", "r"), *fo=fopen("rmq.out", "w");
fscanf(fi, "%d%d", &n, &m);
for(i=1;i<=n;i++)
fscanf(fi, "%d", &d[i][0]);
for(i=1;i<=n;i++)
for(j=1;(1<<j)<=i;j++)
d[i][j]=min(d[i][j-1],d[i-(1<<(j-1))][j-1]);
log[1]=0;
for(i=2;i<=n;i++)
log[i]=1+log[i/2];
for(i=0;i<m;i++){
fscanf(fi, "%d%d", &a, &b);
fprintf(fo, "%d\n", min(d[b][LOG],d[a+(1<<LOG)-1][LOG]));
}
fclose(fi);
fclose(fo);
return 0;
}