Cod sursa(job #1776730)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 11 octombrie 2016 19:19:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <vector>

#define MAX 100002

using namespace std;

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

long rmq[18][MAX];
long n,m;
vector <long> lg,v;

int main()
{long l,x,y,dif,e;
    f>>n>>m;
    v.resize(n+1);
    lg.resize(n+1);
    for (int i=1;i<=n;++i)
        f>>v[i];
    for (int i=2;i<=n;++i)
        lg[i]=lg[i/2]+1;
    for (int i=1;i<=n;++i)
        rmq[0][i]=v[i];
    for (int i=1; (1 << i) <= n;++i)
        for (int j=1;j <= n - (1 << i)+1;++j)
        {
        l = 1 << (i-1);
        rmq[i][j]= min( rmq[i-1][j] , rmq[i-1][j+l] );
        }
    for (int i=0;i<m;++i)
    {
        f>>x>>y;
        dif=y-x+1;
        l=lg[dif];
        e=dif - (1 << l);
        t<<min(rmq[l][x],rmq[l][x+e])<<'\n';
    }
    return 0;
}