Cod sursa(job #3185817)

Utilizator MateiCatalinUrsache Matei MateiCatalin Data 20 decembrie 2023 15:42:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,m,a[100001];
int ai[400001];
int x,y;

void creare(int st,int dr,int nod)
{
    if(st==dr)
    {
        ai[nod]=a[st];
        return;
    }
    int mij=(st+dr)/2;
    creare(st,mij,nod*2);
    creare(mij+1,dr,nod*2+1);
    ai[nod]=min(ai[nod*2],ai[nod*2+1]);
}

int query(int st,int dr,int nod)
{
    if(st>y || dr<x)
        return 100000;
    if(st>=x && dr<=y)
        return ai[nod];
    int mij=(st+dr)/2;
    return min(query(st,mij,nod*2),query(mij+1,dr,nod*2+1));
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        f>>a[i];
    creare(1,n,1);
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        g<<query(1,n,1)<<'\n';
    }
    return 0;
}