Cod sursa(job #2889275)

Utilizator vlanderovlad rosu vlandero Data 12 aprilie 2022 15:42:52
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int p[100001], dp[17][100001];

int main()
{
    int i, n, m, j;
    int pow2 = 1;
    cin >> n >> m;
    p[1] = 0;
    for (i = 1; i <= 100000; ++i)
    {
        if (pow2 > p[i])
        {
            p[i] = p[i - 1];
        }
        else
        {
            p[i] = pow2;
            pow2 *= 2;
        }
    }
    for (i = 1; i <= n; i++)
    {
        cin >> dp[0][i];
    }
    p[0] = 0;
    for (i = 1; i <= p[n]; ++i)
    {
        for (j = 1; j <= n - (1 << i) + 1; ++j)
        {
            dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + (1 << (i + 1))]);
        }
    }
    int a, b;
    for (i = 1; i <= m; ++i)
    {
        cin >> a >> b;
        int pow = p[b - a + 1];
        int rez = min(dp[pow][a], dp[pow][b - (1 << pow) + 1]);
        cout << rez << '\n';
    }
    cin.close();
    cout.close();
    return 0;
}