Cod sursa(job #2264844)

Utilizator DovlecelBostan Andrei Dovlecel Data 20 octombrie 2018 11:57:03
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>

#include <fstream>

using namespace std;

ifstream in("rmq.in");

ofstream out("rmq.out");

const int N=100001;

int log2[N],v[N],r[N][17],n,m;//r[i][j]=minimul pentru secventa de lungime 2^i care se termina pe pozitia j

int main()

{

    int i,j,a,b,l,rez;

    in>>n>>m;

    for(i=1;i<=n;i++)

        in>>v[i];

    for(i=2;i<=n;i++)

        log2[i]=1+log2[i/2];

    for(i=1;i<=n;i++)

    {

        r[i][0]=v[i];

        j=1;

        while((1<<j)<=i)

        {

            r[i][j]=min(r[i-(1<<(j-1))][j-1],r[i][j-1]);

            j++;

        }

    }

    for(i=1;i<=m;i++)

    {

        in>>a>>b;

        l=log2[b-a+1];

        rez=min(r[b][l],r[a+(1<<l)-1][l]);

        out<<rez<<'\n';

    }

    return 0;

}