Cod sursa(job #2761175)

Utilizator Virgil993Virgil Turcu Virgil993 Data 30 iunie 2021 23:40:07
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#include<iostream>


using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

//vom folosi algoritmul de rmq ce consta in memorarea minimelor pe intervale de lungime 2^k asociate fiecarui element , si apoi raspunderea la orice interogare, impartind intervalul dat in doua intervale mai mici de lungime 2^j

int rmq[100001][20];


int main()
{
    int n,m,x,y,nr,power,close,s,minim;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>rmq[i][0];
    }
    for(int j=1;j<=int(log2(n));j++)
        for(int i=1;i+pow(2,j-1)<=n;i++)
            rmq[i][j] = min(rmq[i][j-1],rmq[i+int(pow(2,j-1))][j-1]);

    for(int i=0;i<m;i++)
    {
        fin>>x>>y;
        nr = y-x+1;
        power = int(log2(nr));
        close = pow(2,power);
        s = y-(x+close-1);
        minim = min(rmq[x][power],rmq[x+s][power]);
        fout<<minim<<"\n";

    }

    return 0;

}