Cod sursa(job #2502048)

Utilizator hurjui12AlexandruHurjui Alexandru-Mihai hurjui12Alexandru Data 30 noiembrie 2019 12:46:46
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int rmq [17][100005];

int main()
{
    int n, m, i, j, a, b, k;
    int lg[100005];
    fin >> n >> m;
    for (i = 1; i<=n; i++)
        fin >> rmq[0][i];

    lg[1] = 0;
    for (i = 2; i<=n; i++)
        lg[i] = lg[i>>1] + 1;

    for (i = 1; (1<<i) <= n; i++)
        for (j = 1; j<=n-(1<<i)+1; j++)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);

    for (i = 1; i<=m; i++)
    {
        fin >> a >> b;
        if (a > b)
            swap(a, b);
        k = lg[b-a+1];
        fout << min(rmq[k][a], rmq[k][b-(1<<k)+1]) << '\n';
    }
    return 0;
}