Cod sursa(job #2229665)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 7 august 2018 19:50:32
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#define VAL 100005
#define PUT 25

using namespace std;

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

int N, M, i, j, v[VAL];
int RMQ[VAL][PUT], LOG[VAL];
int P, ANS, be, en, A, B;

int main()
{
    fin >> N >> M;
    for (i=1; i<=N; i++)
    {
        fin >> v[i];
        RMQ[i][0]=v[i];
        LOG[i]=P;
        if (i==2*(1 << P))
            P++;
    }
    for (j=1; j<=P; j++)
    {
        for (i=1; i+(1 << j)-1<=N; i++)
        {
            RMQ[i][j]=RMQ[i][j-1];
            if (RMQ[i+(1 << (j-1))][j-1]>0)
                RMQ[i][j]=min(RMQ[i][j], RMQ[i+(1 << (j-1))][j-1]);
        }
    }
    for (i=1; i<=M; i++)
    {
        fin >> be >> en;
        A=LOG[en-be+1];
        B=(1 << A);
        ANS=min(RMQ[be][A], RMQ[en-B+1][A]);
        fout << ANS << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}