Cod sursa(job #3185320)

Utilizator AlexandraRusRus Alexandra Maria AlexandraRus Data 18 decembrie 2023 18:43:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int x, y;
int n, m, v[100001], arbint[400001];

int query(int ind, int st, int dr)
{
    if(st>=x && dr<=y) return arbint[ind];
    if(st>y || dr<x) return 200000;
    int mij=(st+dr)/2;
    int m1=query(ind*2, st, mij);
    int m2=query(ind*2+1, mij+1, dr);
    return min(m1, m2);
}

void creare(int ind, int st, int dr)
{
    if(st==dr)
    {
        arbint[ind]=v[st];
        return;
    }
    int mij=(st+dr)/2;
    creare(ind*2, st, mij);
    creare(ind*2+1, mij+1, dr);
    arbint[ind]=min(arbint[ind*2], arbint[ind*2+1]);
}

void solve()
{

    fout<<query(1, 1, n)<<"\n";
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    creare(1, 1, n);
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        solve();
    }
    return 0;
}