Cod sursa(job #2183071)

Utilizator VarticeanNicolae Varticean Varticean Data 22 martie 2018 19:52:56
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m, val, a[400005], lef, rig;

void update( int nod, int st, int dr, int poz)
{
    if( st== dr )
    {
        a[nod] = val;
        return;
    }
    int mid = ( st + dr ) /2;
    if( poz<=mid ) update( nod*2, st, mid,poz);
    else update( nod*2+1, mid+1, dr, poz);
    a[nod] = min( a[nod*2], a[2*nod+1]);
}

void qwery( int nod, int st, int dr )
{
    if( st >= lef && dr <= rig )
    {
        val = min( val , a[nod]);
        return ;
    }
    int mid = (st+dr) /2;
    if( lef <=mid ) qwery(nod*2, st, mid);
    if( rig > mid ) qwery(nod*2+1, mid+1, dr);
}


int main()
{
    ios::sync_with_stdio(0);
    in >> n >> m;
    int x,y;
    for(int i=1; i<=n; i++)
    {
        in >> x;
        val = x;
        update(1,1,n,i);
    }

    for(int i=1; i<=m; i++)
    {
        in >> x >> y;
        lef = x;
        rig = y;
        val = 1<<30;
        qwery(1,1,n);
        out << val << '\n';
    }

    return 0;
}