Cod sursa(job #2755179)

Utilizator Costin_PintilieHoratiu-Costin-Petru Pintilie Costin_Pintilie Data 26 mai 2021 20:57:48
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int RMQ[100][100001];
int n,q,x,y,i,j,p;

void processRMQ(){
    for( i = 1; i <= n;i++)
        fin>>RMQ[0][i]; //initializam prima linie a matricei cu elem din vector

    for( i = 1, p = 2;p <= n; i++, p *= 2) // in continuare calculam minimul pe intervale din ce in ce mai mari
        for( j =1; j<= n; j++)
            RMQ[i][j] = min(RMQ[i-1][j],RMQ[i-1][j+p/2]);

}

int Query(int x, int y){
    int p = 1;
    int i = 0;

    while(p*2 <= y - x + 1){
        p *= 2;
        i ++;
    }
    return min(RMQ[i][x],RMQ[i][y-p+1]);
}

int main()
{
    fin>>n>>q;
    processRMQ();

    for ( i=1; i<=q; i++){
        fin>>x>>y;
        fout<<Query(x,y)<<"\n";
    }

    fin.close();
    fout.close();

    return 0;
}