Cod sursa(job #3039958)

Utilizator TomaaBrihacescu Toma Tomaa Data 29 martie 2023 09:20:18
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

int v[100006];
const int LOG = 17;
int lookup[10006][LOG];

int query(int L, int R)
{
    int length = R - L + 1;
    int k = 31 - __builtin_clz(length);
    return min(lookup[L][k], lookup[R-(1<<k)+1][k]);
}

void RMQ(int n)
{
    for (int j = 1; j < LOG; j++)
        for (int i = 1; i + (1<<j) - 1 <= n; i++)
        {
            lookup[i][j] = min(lookup[i][j-1], lookup[i+(1<<(j-1))][j-1]);
        }
}

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

int main()
{
    int n, m, L, R;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
        lookup[i][0] = v[i];
    }
    RMQ(n);
    for (int q = 1;  q <= m; q++)
    {
        cin >> L >> R;
        cout << query(L, R) << '\n';
    }
    return 0;
}