Cod sursa(job #2512718)

Utilizator TudorCristeaCristea Tudor TudorCristea Data 21 decembrie 2019 14:16:46
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>

#define ZERO 1000000000

using namespace std;

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

int Arr[100005],N,Q,k,table[100005][20];

int query (int st,int dr)
{
    int rez=ZERO;
    for (int i=k;i>=0;i--)
    {
        if (st+(1<<i)-1<=dr)
        {
            rez=min(rez,table[st][i]);
            st=st+(1<<i);
        }
    }
    return rez;
}

int main()
{
    fin >> N >> Q;
    for (int i=0;i<N;i++)
    {
        fin >> Arr[i];
        table[i][0]=Arr[i];
    }
    for (int j=1;(1<<j)<=N;j++)
    {
        k++;
        for (int i=0;i+(1<<j)<=N;i++)
        {
            table[i][j]=min(table[i][j-1],table[i+(1<<(j-1))][j-1]);
        }
    }
    int st,dr;
    for (int i=0;i<Q;i++)
    {
        fin >> st >> dr;
        fout << query(st-1,dr-1) << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}