Cod sursa(job #2869526)

Utilizator matei8787Matei Dobrea matei8787 Data 11 martie 2022 16:51:40
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int t[100005][17], n, m, x, y, lg[100005];
void precalc()
{
    for ( int i = 2 ; i <= 100000 ; i++ )
    {
        lg[i] = 1 + lg[i/2];
    }
}
void citire()
{
    precalc();
    in>>n>>m;
    for ( int i = 1 ; i <= n ; i++ )
    {
        in>>t[i][0];
    }
}
void make_restul_t()
{
    for ( int j = 1 ; (1<<j) <= n ; j++ )
    {
        for ( int i = (1<<j) ; i <= n ; i++ )
        {
            t[i][j] = min(t[i][j-1], t[i - (1<<j-1)][j-1]);
        }
    }
}
void rez()
{
    for ( int i = 1 ; i <= m ; i++ )
    {
        in>>x>>y;
        out<<min(t[y][lg[y-x+1]], t[x+(1<<lg[y-x+1])-1][lg[y-x+1]])<<'\n';
    }
}
int main()
{
    citire();
    make_restul_t();
    rez();
    return 0;
}