Cod sursa(job #3123422)

Utilizator francesca79Feier Francesca francesca79 Data 23 aprilie 2023 16:56:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

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

long long rmq[18][100001],n,m,l,lg[100001],a[100001];

int main()
{
    fin >> n >> m;
    for (int i=1; i<=n; i++)
        fin >> a[i];
    lg[1]=0;
    for (int i=2; i<=n; i++)
        lg[i]=lg[i/2]+1;
    for (int i=1; i<=n; i++)
        rmq[0][i]=a[i];
    for (int i=1; (1 << i) <=n; i++)
        for (int j=1; j <= n-(1 << i)+1 ; j++)
        {
            l=1 << (i-1);
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+l]);
        }
    long long x,y;
    for (int i=1;i<=m;i++)
    {
        fin >> x >> y;
        l=lg[y-x+1];
        fout << min(rmq[l][x],rmq[l][y-(1 << l)+1]) << endl;
    }
    return 0;
}