Cod sursa(job #1961642)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 11 aprilie 2017 11:29:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

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

int i, n, m, j, d[20][100002], p[100002], x, y, l;

int main()
{
    f>>n>>m;
    for( i = 1; i <= n; ++ i )
        f>>d[0][i];

    for( i = 1; (1 << i) <= n; ++ i )
    {
        for( j = 1; j <= n; ++ j )
        {
            if((1 >> (i - 1)) <= n)
                d[i][j] = min( d[i-1][j], d[i-1][j + (1 << (i - 1))]);
            else
                d[i][j]=d[i-1][j];
        }
    }

    p[1]=0;

    for( i = 2; i <= n; ++ i)
    {
        p[i] = 1 + p[i / 2];
    }

    for( i = 1; i <= m; ++ i)
    {
        f>>x>>y;
        l=p[y - x + 1];
        g << min(d[l][x], d[l][y - (1<<l) + 1])<<'\n';
    }

    return 0;
}