Cod sursa(job #1797305)

Utilizator mihai.alphamihai craciun mihai.alpha Data 4 noiembrie 2016 11:13:49
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
int logg[100010];
int rmq[20][100010];
FILE *fin, *fout;
int main()  {
    fin = fopen("rmq.in", "r");
    fout = fopen("rmq.out", "w");
    int i, n;
    int m;
    fscanf(fin, "%d%d", &n, &m);
    for(i = 1;i <= n;i++)
        fscanf(fin, "%d", &rmq[0][i]);
    for(i = 2;i <= n;i++)
        logg[i] = logg[i / 2] + 1;
    for(int j = 1;j <= logg[n];j++)
        for(i = 1;i+(1<<j) - 1 <= n;i++)
            rmq[j][i] = std::min(rmq[j - 1][i], rmq[j - 1][i + (1 <<(j-1))]);
    for(i = 1;i <= m;i++)  {
        int a, b;
        fscanf(fin, "%d%d", &a, &b);
        int l = logg[b - a + 1];
        int sol = std::min(rmq[l][a], rmq[l][b - (1 << l)+1]);
        fprintf(fout, "%d\n", sol);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}