Cod sursa(job #2848533)

Utilizator AswVwsACamburu Luca AswVwsA Data 12 februarie 2022 19:21:53
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include <queue>
using namespace std;
const int NMAX = 100003, LMAX = 18;
int r[LMAX][NMAX], v[NMAX], prec[NMAX];
int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int n, m, i, j;
    cin >> n >> m;
    prec[0] = -1;
    for (i = 1; i <= n; i++)
    {
        cin >> v[i];
        r[0][i] = v[i];
        prec[i] = prec[i - 1] + (!(i & (i - 1)));
    }
    for (i = 1; i <= prec[n]; i++)
        for (j = (1 << i); j <= n; j++)
            r[i][j] = min(r[i - 1][j], r[i - 1][j - (1 << (i - 1))]);
    while (m--)
    {
        int x, y;
        cin >> x >> y;
        cout << min(r[prec[y - x + 1]][y],
                    r[prec[y - x + 1]][x + (1 << prec[y - x + 1]) - 1]) << "\n";
    }
}