Cod sursa(job #2625319)

Utilizator daniel-ilie.judetJudet Daniel Ilie daniel-ilie.judet Data 5 iunie 2020 21:14:18
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;
}