Cod sursa(job #2324095)

Utilizator racheriunicolaechowchow racheriunicolae Data 20 ianuarie 2019 11:41:51
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 1e5 + 5;
int n , m , p , k , t , x , y , lg[NMAX] , dp[30][NMAX] , i , v[NMAX] , l;
int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    fin >> n >> m;
    for(i = 1; i <= n; i++)fin >> v[i] , dp[0][i] = v[i];
    for(p = 2; p <= (1 << n); p *= 2)
    {
        k++;
        for(i = 1; i + p - 1<= n; i++)
        {
            dp[k][i] = min(dp[k - 1][i] , dp[k - 1][i + p / 2 ]);
        }
    }
    k = 0;
    for(i = 1 ; i <= 1e5; i++)
    {
        if((1 << (k + 1)) == i)k++;
        lg[i] = log(i) / log(2);

    }
    for(t = 1; t <= m; t++)
    {
        fin >> x >> y;
        l = lg[y - x + 1] ;
        fout<< min(dp[l][x] , dp[l][y - (1<<l) + 1]) << "\n";

    }
    return 0;
}