Cod sursa(job #2496593)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 21 noiembrie 2019 09:42:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>

using namespace std;

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

int lg2[100007];

int n, m;

int mn[18][100007];

int put;

int x, y;

int main()
{
    in >> n >> m;
    for ( register int i = 2 ; i <= n ; ++i )
        lg2[i] = lg2[i/2]+1;
    for ( register int i = 1 ; i <= n ; ++i )
        in >> mn[0][i];
    for ( register int i = 1 ; i <= lg2[n] ; ++i )
    {
        put = (1<<i);
        for ( register int j = 1 ; j <= n-put/2 ; ++j )
            mn[i][j] = min ( mn[i-1][j], mn[i-1][j+put/2] );
    }
    for ( register int querry = 1 ; querry <= m ; ++querry )
    {
        in >> x >> y;
        out << min ( mn[lg2[y-x+1]][x], mn[lg2[y-x+1]][y-(1<<lg2[y-x+1])+1] ) << '\n';
    }
    return 0;
}