Cod sursa(job #2753853)

Utilizator andreea_07Andreea Georgescu andreea_07 Data 24 mai 2021 16:36:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;


int RMQ[100][100001],v[100001],lg[100001];

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int i,j,n,m, x, y,z,d,linie;
    fin >> n >> m;
    for( i = 1; i <= n; i++)
        fin>> v[i];

    for(i = 1; i <= n; i++)
        RMQ[0][i] = v[i]; ///initializam prima linie cu vectorul


    for( i = 1; pow(2,i) <= n; i++)///construim matricea
        for ( j = 1; j+pow(2,i)-1<=n; j++)
            RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1<<(i-1))]);

    lg[1] = 0;

    for(i=2; i <= n; i++) ///construim vectorul de puteri
        lg[i] = lg[ i/2] + 1;

    for (i = 0; i < m; i++)
    {

        fin>> x >> y;

        z = y - x + 1;

        linie = lg[z]; ///calculam linia din matrice pe care se afla rezulatul

        d = z - (pow(2,linie));
        fout<< min( RMQ[linie][x],RMQ[linie][x+d])<<'\n';
    }


    return 0;
}