Cod sursa(job #2211793)

Utilizator cristiifrimIfrim Cristian cristiifrim Data 11 iunie 2018 21:16:24
Problema Range minimum query Scor 100
Compilator cpp 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[100001][30];


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