Cod sursa(job #3260589)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 2 decembrie 2024 20:36:40
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 2*100000;
const int LG   = 17;

int n, q; int st, dr;
int v[NMAX+1];
int RMQ[NMAX+1][LG];
int calcLog[NMAX+1];

int main()
{
    fin >> n >> q;
    for(int i=1; i<=n; i++)
        fin >> v[i], RMQ[i][0] = v[i];
    for(int lg=1; lg<=LG; lg++)
    {
        for(int i=1; i+(1<<lg)<=n*2; i++)
        {
            RMQ[i][lg] = min(RMQ[i][lg-1],RMQ[i+(1<<(lg-1))][lg-1]);
        }
    }
    for(int i=2; i<=n; i++)
        calcLog[i] = calcLog[i/2]+1;
    while(q--)
    {
        fin >> st >> dr;
        int lg = calcLog[dr-st+1];
        fout << min(RMQ[st][lg], RMQ[1+dr-(1<<lg)][lg]) << '\n';
    }
    return 0;
}