Cod sursa(job #2754112)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 25 mai 2021 08:27:32
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,v[10000],rmq[20][100000],log[10000];

void config_puteri_2(){
    for(int i=2; i<=n; i*=2)  log[i]++;
    for(int i=1; i<=n; i++) log[i] = log[i]+log[i-1];
}

int power2(int x){
    return (1<<x);
}

int main()
{
    int x,y,a,b,h;
    config_puteri_2();
    f>>n>>m;
    for(int i=0; i<n; i++){
        f>>x;
        v[i+1]=x;
        rmq[0][i+1] = x;
    }

    for(int i=1; i<=log[n]; i++){
        for(int j=1; j<=n - power2(i)+1; j++){
            a = rmq[i-1][j];
            b = rmq[i-1][j+power2(i-1)];
            if(a < b){
                rmq[i][j] = a;
            }else{
                rmq[i][j] = b;
            }
        }
    }

    for(int i=0; i<m; i++){
        f>>x>>y;
        h = log[y-x+1];
        a = rmq[h][x];
        b = rmq[h][y-power2(h)+1];
        if(a<b){
            g<<a;
        }else{
            g<<b;
        }
        g<<"\n";
    }
    return 0;
}