Cod sursa(job #3133826)

Utilizator alexnohai04Nohai Alexandru alexnohai04 Data 27 mai 2023 01:04:39
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

const int N = 131072;
const int LN = 17;
int M[LN][N];

int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");

    int n, m;
    f >> n >> m;

    for (int i = 1; i <= n; i++)
        f >> M[1][i];

    for (int i = 2, k = 2; k <= n; i++, k <<= 1)
    {
        for (int j = 1; j <= n; j++)
        {
            M[i][j] = min(M[i - 1][j], M[i - 1][j + k / 2]);
        }
    }

    for (int i = 1; i <= m; i++)
    {
        int a, b;
        f >> a >> b;
        int k = 1;
        int h = 1;
        while (k << 1 <= b - a + 1)
        {
            k <<= 1;
            h++;
        }
        g << min(M[h][a], M[h][b - k + 1]) << '\n';
    }

    f.close();
    g.close();
    return 0;
}