Cod sursa(job #3330552)

Utilizator nata.03Pal-Serban Natalia nata.03 Data 20 decembrie 2025 10:05:40
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int N, M, a, mat[__lg(100000)+1][100001];

void solve()
{
    vector<int> values(N+1);
    fin >> N >> M;
    values.push_back(0);
    for (int i=1; i<=N; i++)
    {
        fin >> values[i];
    }
    
    for(int i=1; i<=N; i++)
    {
        mat[0][i]=values[i];
    }
    
    for (int k=1; (1<<k)<= N; ++k)
    {
        for (int i=1; i + (1<<k)-1 <=N; ++i)
        {
            int j = i + (1<<(k-1));
            mat[k][i] = min(mat[k-1][i], mat[k-1][j]);
        }
    }
    
    for (int it=1; it<=M; it++)
    {
        int x,y;
        fin >> x >> y;
        int k= __lg(y-x+1);
        fout << min(mat[k][x],mat[k][y-(1<<k)+1]) << "\n";
    }
}

int main()
{
    solve();
    return 0;
}