Pagini recente » Cod sursa (job #713866) | Cod sursa (job #1142227) | Cod sursa (job #1451055) | Cod sursa (job #694457) | Cod sursa (job #1800057)
#include <stdio.h>
#define LOG log[b-a+1]
int d[100001][17], log[100001];
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;
}