Cod sursa(job #2620784)

Utilizator UtilizatorGBGeorge Bodea UtilizatorGB Data 29 mai 2020 17:44:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

int rmq[20][100000];


int main(){
    int n,m;
    f>>n>>m;

    for (int i = 0; i < n; i++)
        f >> rmq[0][i];

    for (int i = 1; (1 << i) <= n; i++) // i <= log 2 n
        for (int j = 0; j < n ; j++){
            if(n<=j + (1 << (i - 1))){
                rmq[i][j] =  rmq[i-1][j]; //rmq[i][j] = min(rmq[i-1][j],rmq[n-1][n-1]);
            }
            else
                rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j + (1 << (i - 1))]);
        }

    int x,y;
    for(int i=0;i<m;i++) {
        f >> x >> y;
        x--;
        y--;
        int k = (int)log2(y - x + 1); // cea mai mare putare a lui 2 <= lungimea intervalului meu
        g << min(rmq[k][x],rmq[k][y - (1 << k) + 1]) << '\n';
    }

    f.close();
    g.close();
    return 0;
}