Cod sursa(job #2840693)

Utilizator Deleanu_LucaDeleanu Luca Deleanu_Luca Data 28 ianuarie 2022 17:24:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

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

int rmq[21][100001], n, m, r1, r2, r, lg, x, y;

void fabricare()
{
    int i, j;
    for(i = 1, lg = 2; lg <= n; i++, lg *= 2)
    {
        for(j = 1; j + lg - 1 <= n; j++)
        {
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (lg / 2)]);
        }
    }
}

int main()
{
    int i, j;
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>rmq[0][i];
    fabricare();

    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        lg = 1;
        j = 0;
        while(lg <= y - x + 1)
        {
            lg *= 2;
            j++;
        }
        j--;
        lg /= 2;

        r1 = rmq[j][x];
        r2 = rmq[j][y - lg + 1];
        r = min(r1, r2);
        fout << r << '\n';
    }
    return 0;
}