Cod sursa(job #2504244)

Utilizator cyg_SerbanBFlorin Gheorghe cyg_SerbanB Data 4 decembrie 2019 18:29:45
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
// C++ program for range minimum
#include <bits/stdc++.h>
using namespace std;
int v[100005],rmq[262144];
int RMQUtil(int st, int dr, int qst, int qdr, int index)
{
    if (qst<=st && qdr>=dr)
        return rmq[index];
    if (dr<qst || st>qdr)
        return INT_MAX;
    int mid=st+(dr-st)/2;
    return min(RMQUtil(st, mid, qst, qdr, 2*index+1),RMQUtil(mid+1, dr, qst, qdr, 2*index+2));
}
int contructRMQuntil(int st, int dr, int si)
{
    if (st==dr)
    {
        rmq[si] = v[st];
        return v[st];
    }
    int mid=st+(dr-st)/2;
    rmq[si]=min(contructRMQuntil(st, mid, si*2+1),contructRMQuntil(mid+1, dr, si*2+2));
    return rmq[si];
}
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    int n,i,qu;
    scanf("%d%d",&n,&qu);
    for(i=0;i<n;++i)
        scanf("%d",&v[i]);
    contructRMQuntil(0,n-1,0);
    int qst,qdr;
    while(qu--)
    {
        scanf("%d %d",&qst,&qdr);
        printf("%d\n",RMQUtil(0, n-1, qst-1, qdr-1, 0));
    }
    return 0;
}