Pagini recente » Cod sursa (job #3186095) | Cod sursa (job #2953953) | Cod sursa (job #560084) | Cod sursa (job #2885117) | Cod sursa (job #453607)
Cod sursa(job #453607)
#include <stdio.h>
#include <vector.h>
#define DIM 100002
#define LOG 1<<5
FILE *f1 = fopen("rmq.in", "r");
FILE *f2 = fopen("rmq.out", "w");
int D[LOG][DIM], PWD[LOG], exp[DIM], A[DIM];
int n, m;
int i, j, ii, x1, x2;
int main(){
fscanf(f1, "%d %d", &n, &m);
for (i=1; i<=n; i++)
fscanf(f1, "%d", &A[i]);
for (i=1; i<=n; i++){
D[0][i] = A[i];
exp[i] = exp[i/2] + 1;
}
for (i=1, PWD[0]=1; PWD[i-1]<=n; i++)
PWD[i] = PWD[i-1]<<1;
for (i=1; i<=n; i*=2)
for (j=1; j+PWD[i-1]<=n; j++)
D[i][j] = min(D[i-1][j], D[i-1][j + PWD[i-1]]);
for (ii=1; ii<=m; ii++){
fscanf(f1, "%d %d", &x1, &x2);
i = min(x1, x2), j = max(x1, x2);
fprintf(f2, "%d\n", min( D[exp[j-i+1]][i], D[exp[j-i+1]][j-PWD[exp[j-i+1]]+1]));
}
fclose(f1);
fclose(f2);
return 0;
}