Cod sursa(job #1678319)

Utilizator stanciuandreiStanciulescu Andrei stanciuandrei Data 7 aprilie 2016 10:42:51
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, rmq[100002][40], a[100002];
int log[100002];

int main()
{
    in>>n>>m;
    log[1]=0;
    for(int i=1;i<=n;i++){
        in>>a[i];
        if(i>=2)
        log[i] = 1+log[i/2];
        if(i>=1)
        rmq[i][0] = a[i];
    }
    for(int j=1;(1<<j)<n;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<j)-1][j-1]);
            cout<<i<<" "<<j<<" "<<rmq[i][j]<<"\n";
        }
    }
    int p, q;
    for(int i=0;i<m;i++)
    {
        in>>p>>q;
        int k = log[q-p+1];
        out<<min(rmq[p][k], rmq[q-(1<<k)+1][k])<<"\n";
    }
    return 0;
}