Cod sursa(job #2754065)

Utilizator Virgil993Virgil Turcu Virgil993 Data 24 mai 2021 22:59:55
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include<bits/stdc++.h>

using namespace std;

#define n_max 100001

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

int v[n_max];
int m[n_max][100];
int lg[100001];
int n;



long long putere(int x)
{
    long long rez = 1;
    while(x)
    {
        rez = rez*2;
        x--;
    }
    return rez;
}

void procces(int v[n_max],int m[n_max][100],int n)
{
    int i,j;
    for(i = 1;i<=n;i++)
        m[0][i] = v[i];
    for(i=1;putere(i)<=n;i++)
        for(j=1;j+putere(i)-1<=n;j++)
            m[i][j] = min(m[i-1][j],m[i-1][j+putere(i-1)]);
}



int main()
{
    int p,k;
    int log;
    int prim,sec;
    lg[1] = 0;
    for(int i=2; i <= n; i++)
    lg[i] = lg[ i/2] + 1;
    fin>>n>>p;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    procces(v,m,n);
    for(int i=0;i<p;i++)
    {
        fin>>prim>>sec;
        k = sec-prim+1;
        log = lg[k];
            fout<<min(m[log][prim],m[log][sec+1 - putere(log)])<<"\n";
    }



    return 0;
}