Cod sursa(job #2627533)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 11 iunie 2020 11:09:16
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f ("rmq.in");
ofstream g ("rmq.out");

const int nmax = 1e5 + 3;

int n, t, lg[nmax], d[nmax][25], x, y, dif;

int main()
{
    f >> n >> t;

    for (int i = 1; i <= n; ++i) f >> d[i][0];

    for (int i = 2; i <= n; ++i) lg[i] = lg[i / 2] + 1;

    for (int i = 1; (1<<i) <= n; ++i)
    {
        for (int j = 1; j + (1<<(i - 1)) <= n; ++j)
            d[j][i] = min(d[j][i - 1], d[j + (1<<(i - 1))][i - 1]);
    }

    while(t--)
    {
        f >> x >> y;
        dif = y - x + 1;
        dif = lg[dif];

        g << min(d[x][dif], d[y - (1<<dif) + 1][dif]) << '\n';
    }
    return 0;
}