Cod sursa(job #2686771)

Utilizator rotarmirRotar Raul rotarmir Data 19 decembrie 2020 13:03:11
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
#define PUTERE_MAXIMA 17
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int n;
int m;
int mat[20][100005];
void contruire_matrice()
{
    for(int i=1;(1<<i)<=n;i++)
    {
        int pw=(1<<i);
        for(int j=1;j+pw-1<=n;j++)
            mat[i][j]=min(mat[i-1][j],mat[i-1][j+pw/2]);
    }
}
int get_answear(int a ,int b)
{
    for(int i=PUTERE_MAXIMA;i>=0;i--)
        if(b-a+1>=(1<<i))
            return min(mat[i][a],mat[i][b-(1<<i)+1]);
}
int main()
{
    fi>>n>>m;
    int L;
    for(int i=1;i<=n;i++)
    {
        fi>>L;
        mat[0][i]=L;
    }
    contruire_matrice();
    int x,y;
    while(m!=0)
    {
        fi>>x>>y;
        fo<<get_answear(x,y)<<endl;
        m--;
    }
    return 0;
}