Cod sursa(job #2787493)

Utilizator Matei_PanzariuMatei Panzariu Matei_Panzariu Data 23 octombrie 2021 15:11:48
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
#include <iostream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q,exp,rmq[1002][1002],p;
int main()
{
    fin>>n>>q;
    for(int i=1; i<=n; i++)
        fin>>rmq[i][0];
    for(int lg=2, exp=1; lg<=n; lg*=2,exp++) ///se construieste matricea
        for(int i=1; i+lg-1<=n; i++)
            rmq[i][exp]=min(rmq[i][exp-1],rmq[i+lg/2][exp-1]);

    while(q)
    {
        int x,y;
        fin>>x>>y;
        int lg=y-x+1;
        p=1;
        exp=0;
        while(p<=lg)
        {
            p*=2;
            exp++;
        }
        p/=2;
        exp--;
        int rasp_stanga=rmq[x][exp];
        int rasp_dreapta=rmq[y-p+1][exp];
        fout<<min(rasp_stanga,rasp_dreapta)<<'\n';
        q--;
    }
}