Cod sursa(job #2374076)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 7 martie 2019 16:49:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100002;

int N,M;
int rmq[20][NMAX];
int lg[NMAX];
void Read()
{
    fin>>N>>M;
    for(int i=1;i<=N;++i)
        fin>>rmq[0][i];
}
int x,y;
void RMQ()
{
    lg[2]=1;
    for(int i=3;i<=NMAX-2;++i)
        lg[i]=lg[i/2]+1;

    for(int i=1; ( 1 << i) <= N; ++i)

        for(int j=1; j + ( 1 << i ) - 1 <= N ; ++j)
        {
            rmq[i][j] = min ( rmq[i-1][j] , rmq[i-1][j + ( 1 << (i-1) )]);
        }
    /*for(int i=0; ( 1 << i) <= N; ++i){
        for(int j=1; j + ( 1 << i ) - 1 <= N ; ++j)
            fout<<rmq[i][j]<<" ";
        fout<<"\n";}*/
    for(int i = 1; i <= M; ++i)
    {
        fin >> x >> y;
        int L=(y-x)+1;

        fout << min(rmq[lg[L]][x], rmq[lg[L]][y - ( 1 << lg[L] ) + 1])<<"\n";
    }
}
int main()
{
    Read();
    RMQ();
    return 0;
}