Cod sursa(job #2615408)

Utilizator betybety bety bety Data 14 mai 2020 16:00:53
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

ifstream cin("rmq.in");

ofstream cout("rmq.out");

const int lim=1e5+3;

const int lgm=18;

int tree[lgm][lim];

int lg[lim];

void init()

{

    for(int i=1;(1<<i)<lim;++i)

        lg[(1<<i)]++;

    for(int i=1;i<=lim;++i)

        lg[i]+=lg[i-1];

}

int main()

{

    init();

    int n,m,x,y;

    cin>>n>>m;

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

        cin>>x,tree[0][i]=x;

    for(int p=1;(1<<p)<=n;++p)

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

        tree[p][i]=min(tree[p-1][i],tree[p-1][i+(1<<(p-1))]);

    while(m--)

    {

        cin>>x>>y;

        int d=lg[y-x+1];

        cout<<min(tree[d][x],tree[d][y-(1<<d)+1])<<'\n';

    }

    return 0;

}