Pagini recente » Cod sursa (job #254134) | Cod sursa (job #2542311) | Cod sursa (job #2161538) | Cod sursa (job #673623) | Cod sursa (job #3220081)
#include <stdio.h>
#define MAXN 100000
#define LOG 17
#define MAXNR 1000000
int rmq[LOG][MAXN];
char e[MAXNR + 1];
static inline min(int a, int b){
return a < b ? a : b;
}
int main()
{
FILE *fin, *fout;
int n, m, i, j, p, l, r;
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(i = 1; i <= n; i++ ){
fscanf(fin, "%d", &rmq[0][i]);
}
for( p = 1; (1 << p) <= n; p++ ){
for(i = 1; i <= n; i++ ){
rmq[p][i] = rmq[p - 1][i];
j = (1 << (p - 1)) + i;
if(j <= n && rmq[p - 1][j] < rmq[p][i])
rmq[p][i] = rmq[p - 1][j];
}
}
for( i = 2; i <= MAXNR; i++ ){
e[i] = e[i / 2] + 1;
}
for(i = 0; i < m; i++){
fscanf(fin, "%d%d", &l, &r);
p = e[r - l + 1];
fprintf(fout, "%d\n", min(rmq[p][l], rmq[p][r - (1 << p) + 1]));
}
fclose(fin);
fclose(fout);
return 0;
}