Cod sursa(job #3229790)

Utilizator VladLuncanLuncan Vlad VladLuncan Data 17 mai 2024 15:38:32
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

using namespace std;

int n, m;
int r[17][100005];
int E[100001];

void preCompute()
{
    E[1] = 0;
    for (int i = 2; i <= n; ++i)
        E[i] = E[i / 2] + 1;

    for (int p = 1; (1 << p) <= n; ++p)
    {
        for (int i = 1; i <= n; ++i)
        {
            int temp = i + (1 << (p - 1));

            r[p][i] = r[p - 1][i];
            if (temp <= n && r[p][i] > r[p - 1][temp])
                r[p][i] = r[p - 1][temp];
        }
    }
}

void read()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
        cin >> r[0][i];

    preCompute();

    for (int i = 1; i <= m; ++i)
    {
        int st, dr;
        cin >> st >> dr;

        int e = E[dr - st + 1];
        int len = (1 << e);

        cout << min(r[e][st], r[e][dr - len + 1]) << '\n';
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);

    read();


    return 0;
}