Cod sursa(job #2892832)

Utilizator EduardSanduSandu Eduard Alexandru EduardSandu Data 23 aprilie 2022 18:36:39
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;

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

int mat[23][100003];

int findpower(int x)
{
    int pow = 0;
    while(x)
    {
        x >>= 1;
        pow++;
    }
    return x;
}

int main()
{
    int n,i,j,k,m,st,dr,putere,res;
    fin>>n>>m;
    for(i=1; i<=n; i++)
    {
        fin>>mat[0][i];
    }

    for(i=1; (1<<i) <= n; i++) // range -- 2^i interval
    {
        for(j=1; j + (1<<i) <= n; i++) // position
        {
            mat[i][j] = min(mat[i-1][j], mat[i-1][j+(1 << (i-1))]);
        }
    }

    for(i=1; i<=m; i++)
    {
        fin>>st>>dr;
        putere = findpower(dr - st + 1);
        res = min(mat[putere][st], mat[putere][dr - (1 << putere) + 1]);
        fout << res << '\n';
    }
    return 0;
}