Cod sursa(job #3347676)

Utilizator TudorNMnegoita tudor mihai TudorNM Data 17 martie 2026 19:55:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

int a[20][100004];
int v[100004];
int n;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

void construieste()
{
    int contor=0;
    for(int cnt=2;cnt<=n;cnt=cnt*2)
    {
        contor++;
        int poz=1;
        while(poz+(cnt/2)<=n)
        {
            a[contor][poz]=min(a[contor-1][poz],a[contor-1][poz+(cnt/2)]);
            poz++;
        }
    }
}

int main()
{
    int q;
    cin>>n>>q;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
        a[0][i]=v[i];
    }

    construieste();


    for(int j=1;j<=q;j++)
    {
        int x,y,putere=0,l,aux=2;
        cin>>x>>y;
        if(x>y)
            swap(x,y);
        l=y-x+1;
        while(aux<=l)
        {
            putere++;
            aux=aux*2;
        }
        cout<<min(a[putere][x],a[putere][y-(aux/2)+1])<<'\n';
    }
    return 0;
}