Cod sursa(job #1518918)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 6 noiembrie 2015 16:04:44
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n, m, x, y;
int rmq[18][100002], lg[100002];

inline int minim(int a, int b)
{
    return (a<b) ? a:b;
}

int main()
{
    int i,j;
    fin>>n>>m;
    for (i=1; i<=n; ++i)
        fin>>rmq[0][i];

    lg[1]=0;
    for (i=2; i<=n; ++i) /// Vector cu logaritmi !
        lg[i]=lg[i>>1]+1;

    for (i=1; i<=n; ++i)
        for (j=1; j<=n; ++j)
            rmq[i][j]=minim(rmq[i-1][j],rmq[i-1][j+1]);

    for (i=1; i<=m; ++i)
    {
        fin>>x>>y;
        int diff,line,s;
        diff=y-x+1;
        line=lg[diff];
        s=diff-(1<<line);
        fout<<minim(rmq[line][x],rmq[line][x+s])<<'\n';
    }
    return 0;
}