Cod sursa(job #2863709)

Utilizator cyg_dragos10Ivan Dragos cyg_dragos10 Data 7 martie 2022 09:12:40
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

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

const int NMAX = 100005;

int v[NMAX],aux[NMAX][21],n,lg[NMAX];

void init()
{
    lg[1]=0;
    for(int i = 2;i <= n;i++)
        lg[i]=lg[i /  2]+1;
    for(int i = 1;i <= n;i++)
        aux[i][0] = v[i];
    for(int i = 1;(1<<i) <= n;i++)
    {
        for(int j = 1;j <= n - (1<<i) + 1;j++)
        {
            int l = 1<<(i-1);
            aux[j][i]=min(aux[j][i - 1],aux[j + 1][i - 1]);
        }
    }
}

int main()
{
    int n,m;
    fin>>m;
    for(int i = 1;i <= n;i++)
    {
        fin>>v[i];
    }
    init();
    int x,y;
    for(int i = 1;i <= m;i++)
    {
        fin>>x>>y;
        int diff = y-x+1;
        int l=lg[diff];
        int sh = diff - (1<<l);
        fout<<min(aux[x][l],aux[x + sh][l])<<"\n";
    }
    return 0;
}