Cod sursa(job #2640283)

Utilizator k2e0e0w3qDumitrescu Gheorghe k2e0e0w3q Data 5 august 2020 21:11:21
Problema Range minimum query Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define N 100000
#define log(x) 31 - __builtin_clz(x)

int dp[log(N) + 1][N];
static inline int min (int a, int b) {
    return a < b ? a : b;
}

int main (void) {
    FILE *fin = fopen("rmq.in", "r"),
         *fout = fopen("rmq.out", "w");
    
    int n, m;
    fscanf(fin, "%d%d", &n, &m);

    int i, j;
    for (i=0; i<n; ++i)
        fscanf(fin, "%d", dp[0] + i);
    
    for (i=1; (1 << i) <= n; ++i)
        for (j=0; j + (1 << i) <= n; ++j)
            dp[i][j] = min(dp[i-1][j], dp[i-1][j + (1 << i-1)]);
    
    int lg;
    for (; m; --m) {
        fscanf(fin, "%d%d", &i, &j);
        --i, --j;
        lg = log(j-i+1);

        fprintf(fout, "%d\n", min(dp[lg][i], dp[lg][j - (1 << lg) + 1]));
    }
    return 0;
}