Cod sursa(job #2100718)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 6 ianuarie 2018 10:28:59
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <math.h>
#include <iostream>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

long N,K;

int main()
{
    f>>N>>K;

    int L=log2(N);

    long M[N][L+1];

    for(int i=0;i<N;i++) f>>M[i][0];

    for(int i=1;i<=L;i++)
    {
        int P=(1<<(i));
        int A=N-P+1;
        for(int j=0;j<A;j++)
        {
            M[j][i]=min(M[j][i-1],M[j+P-i][i-1]);
        }
    }

    long X1,X2;
    for(int i=0;i<K;i++)
    {
        f>>X1>>X2;
        int Q=X2-X1+1,j=0;
        long Min=M[X1-1][0];
        while(Q>0)
        {
            if(Q & 1)
            {
                Min=min(Min,M[X1-1][j]);
                X1+=j+1;
            }
            j++;
            Q>>=1;
        }
        g<<Min<<'\n';
    }

    return 0;
}