Cod sursa(job #3175894)

Utilizator paull122Paul Ion paull122 Data 26 noiembrie 2023 15:22:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

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

#define LOGN 18
#define MAXN 100000
int rmq[MAXN + 1][LOGN + 1];
int p[MAXN + 1];
int n,q;
int main()
{
    fin >> n >> q;
    for(int i=1;i<=n;i++)
    {
        fin >> rmq[i][0];
    }
    p[1]=0;
    for(int i=2;i<=MAXN;i++)
    {
        p[i]=p[i/2]+1;
    }

    for(int i=1;i<=LOGN;i++)
    {
        for(int j=1;j<=n;j++)
        {
            rmq[j][i]=rmq[j][i-1];
            if(j + (1<< (i-1)) <= n)
            {
                rmq[j][i]=min(rmq[j][i],rmq[j+(1<<(i-1))][i-1]);
            }
        }
    }
    while(q--)
    {
        int l,r;
        fin >> l >> r;
        int len = p[r-l+1];
        fout << min(rmq[l][len],rmq[r-(1<<len)+1][len]) << "\n";
    }
}