Cod sursa(job #2754058)

Utilizator Virgil993Virgil Turcu Virgil993 Data 24 mai 2021 22:45:14
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 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][(int)log2(n_max)];
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][(int)log2(n_max)],int n)
{
    int i,j;
    for(i = 1;i<=n;i++)
        m[i][0] = v[i];
    for(j=1;putere(j)<=n;j++)
        for(i=1;i+putere(j)-1<=n;i++)
            m[i][j] = min(m[i][j-1],m[i + putere(j-1)][j-1]);
}



int main()
{
    int p;
    int log;
    int prim,sec;
    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;
        log = (int)log2(sec-prim+1);
            fout<<min(m[prim][log],m[sec-putere(log)+1][log])<<"\n";
    }



    return 0;
}