Cod sursa(job #2631255)

Utilizator doyouhavethetimeStanculescu Gabriel doyouhavethetime Data 29 iunie 2020 16:37:32
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#define N 100000
#define log(x) 31-__builtin_clz(x)
#define min(a, b) a<b?a:b

int seg[log(N)+1][N];
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", seg[0]+i);

    for (i=1; (1<<i) < n; ++i)
        for (j=0; j + (1<<i) <= n; ++j)
            seg[i][j]=min(seg[i-1][j], seg[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(seg[lg][i], seg[lg][j-(1<<lg)+1]));
    }
    return 0;
}