Cod sursa(job #2485959)

Utilizator cristiifrimIfrim Cristian cristiifrim Data 2 noiembrie 2019 10:51:18
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb

#include <fstream>

using namespace std;

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

int v[100001], logx[100001], rmq[30][100001];


int main()
{   int n, m, startx, finalx;
    fCin >> n >> m;
    for(int i = 1; i <= n; ++i) fCin >> v[i];
    for(int i = 2; i <= n; ++i) logx[i] = logx[i >> 1] + 1;
    for(int i = 1; i <= n; ++i) rmq[0][i] = v[i];
    for(int i = 1; (1 << i) <= n; ++i)
        for(int j = 1; j <= n - (1 << i) + 1; ++j)
            rmq[i][j] = (rmq[i - 1][j] < rmq[i - 1][j + (1 << (i - 1))])?rmq[i - 1][j]:rmq[i - 1][j + (1 << (i - 1))];
    for(int i = 1; i <= m; ++i)
    {
        fCin >> startx >> finalx;
        int lungime = logx[finalx - startx + 1];
        (rmq[lungime][startx] < rmq[lungime][finalx - (1 << lungime) + 1])?fCout << rmq[lungime][startx] << '\n':fCout << rmq[lungime][finalx - (1 << lungime) + 1] << '\n';
    }
    return 0;
}