Cod sursa(job #2576595)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 6 martie 2020 20:49:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N_MAX = 1e5 + 1;

int lg[N_MAX], dp[18][N_MAX], N, M;


int main()
{
    lg[1] = 0;

    for(int i = 2; i < N_MAX; ++i)
        lg[i] = lg[i >> 1] + 1;


    fin >> N >> M;

    for(int i = 1; i <= N; ++i) fin >> dp[0][i];

    for(int k = 1; k <= lg[N]; ++k)
        for(int i = 1; i + (1 << k) - 1 <= N; ++i)
            dp[k][i] = min(dp[k-1][i], dp[k-1][i + (1 << (k-1))]);

    for(int i = 1; i <= M; ++i)
    {
        int l, r;
        fin >> l >> r;

        int len_lg = lg[r - l + 1];

        fout << min(dp[len_lg][l], dp[len_lg][r + 1 - (1 << len_lg)]) << '\n';
    }
}