Cod sursa(job #2506562)

Utilizator hunting_dogIrimia Alex hunting_dog Data 8 decembrie 2019 13:33:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>
#define NMAX 100000

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int v[NMAX][17]={0},a[NMAX],n;

int log2(int x)
{
    if(x==1)
        return 0;
    return log2(x/2)+1;

}

void rmq()
{
    for(int i=0;i<n;++i)
        v[i][0]=a[i];
    for(int j=1;(1<<j)<=n;++j)
        for(int i=0;i+(1<<j)-1<=n;++i)
            v[i][j]=min(v[i][j-1],v[i+(1<<(j-1))][j-1]);

}

int main()
{
    int m;
    f>>n>>m;
    for(int i=0;i<n;++i)
        f>>a[i];

    rmq();

    while(m--)
    {
        int x,y;
        f>>x>>y;
        --x,--y;
        int r=log2(y-x+1);
        g<<min(v[x][r],v[y-(1<<r)+1][r])<<'\n';
    }

    return 0;
}