Cod sursa(job #2072466)

Utilizator dragos231456Neghina Dragos dragos231456 Data 21 noiembrie 2017 21:19:50
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,v[100005],a[100005][20],x,y,r,h;

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

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i) f>>v[i];
    RMQ();
    for(int i=1;i<=m;++i)
    {
        f>>x>>y;
        h=y-x+1;
        r=log2(h);
        g<<min(a[x][r],a[y-(1<<r)+1][r])<<'\n';
    }
    return 0;
}