Cod sursa(job #2102619)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 9 ianuarie 2018 08:55:55
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <math.h>
#include <vector>
#include <iostream>

using namespace std;

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

#define INT unsigned int

long N,K;

vector< vector<int> > buff(20);

void rmq(vector<int> &v)
{
    buff[0]=v;
    for(INT i=0;i<buff.size();i++) buff[i].resize(v.size());
    for(INT i=1,step=1;i<20;i++,step*=2)
        for(INT j=0,k=step;k<buff[i].size();k++,j++)
             buff[i][j] = min(buff[i-1][j], buff[i-1][k]);
}

int query(int st,int dr)
{
    const int niv=log2(dr-st+1);
    return min(buff[niv][st],buff[niv][dr- (1<<niv) +1]);
}


int main()
{
    f>>N>>K;
    vector<int> V(N);
    for(int i=0;i<N;i++) f>>V[i];
    rmq(V);
    for(int i=0,st,dr;i<K;i++)
    {
        f>>st>>dr;
        g<<query(st-1,dr-1)<<'\n';
    }
    return 0;
}