Cod sursa(job #3203542)

Utilizator adelina_15InfoAdelina Radoi adelina_15Info Data 13 februarie 2024 20:54:53
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
vector<int> a;
vector<int> lg;

int sp[20][100000];

void Constr()
{
    for(int i = 0; i < n; i++)
        sp[0][i] = a[i];

    int crt = lg[n];

    for(int i = 1; i <= crt; i++)
    {
        for(int j = 0; j+(1<<i)-1 < n; j++)
        {
            int aj = (1<<(i-1));
            sp[i][j] = min(sp[i-1][j], sp[i-1][j + aj]);
        }
    }
}

int main()
{
    fin >> n >> m;
    a.resize(n);
    lg.resize(n+1);
    for(int i = 0; i < n; i++)
        fin >> a[i];
    for(int i = 2; i <= n; i++)
        lg[i] = 1 + lg[i/2];

    Constr();
    for(int i = 0; i < m; i++)
    {
        int x, y;
        fin >> x >> y;
        x--;
        y--;
        int len = y-x+1;
        int p = lg[len];
        fout << min(sp[p][x], sp[p][y-(1<<p)+1]) << "\n";
    }
    return 0;
}