Cod sursa(job #3269004)

Utilizator IulyanBlanariu Iulian Iulyan Data 18 ianuarie 2025 10:11:23
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");


int A[400400];
int n,m,a,b,t,i,minim;

void build(int nod, int st, int dr)
{
    if(st==dr) fin >> A[nod];
    else {
        int mid = (st+dr)/2;
        build(2*nod, st, mid);
        build(2*nod+1, mid+1, dr);;
        A[nod] = min(A[2*nod],A[2*nod+1]);
    }
}

void query(int st, int dr, int nod, int a, int b)
{
    if(a <= st && b >= dr)
        minim = min(minim, A[nod]);
    else {
        int mid = (st+dr)/2;
        if(a<=mid)
        query(st, mid,2*nod, a, b);
        if(b > mid)
        query(mid+1, dr, 2*nod+1,a ,b);
        }
}

int main()
{
   fin >> n >> m;
   build(1,1,n);
   for(int i=1; i<=m; i++)
   {
        fin >> a >> b;
        minim = 2000000000;
        query(1,n,1,a,b);
        fout << minim << '\n';
   }
}