Cod sursa(job #2567262)

Utilizator dragossofiaSofia Dragos dragossofia Data 3 martie 2020 16:17:15
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
#define Nmax 100002
#define inf  1 << 30
using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int a[ Nmax ], n, m, poz, val, qs, qf ;
int aint[ 4 * Nmax ] ;
void update  ( int s, int d, int  p )
{
    if( s == d )
    {
        //cout<<s<<" "<<val<<"\n";
        aint [ p ] = val ;
        return ;
    }
    int mid =  ( s + d ) / 2 ;
    if( poz <= mid )
        update( s, mid, 2 * p );
    else
        update( mid + 1, d, 2 * p + 1 );

    aint[ p ] = min( aint [ 2 * p ], aint [ 2 * p + 1 ]);
}

int query ( int s, int d, int p )
{
    if( qs <= s && qf >= d  )
        {
         //cout<<qs<<" "<<qf<<" "<<s<<" "<<d<<"\n";
         return aint[ p ];

        }
    if( qs > d || qf < s )
        return inf ;
    int mid = ( s + d ) / 2 ;
    return min ( query ( s, mid, 2 * p ), query( mid + 1, d, 2 * p + 1 ) ) ;

}
void citire( )
{
    int i , j;

    fin>>n>>m;
    for( i = 1 ; i <= 4 * n ; i ++)
        aint[ i ] = inf ;
    for( i = 1 ; i <= n ; i++ )
    {
        fin>> val;
        poz = i;
        update( 1, n, 1 ) ;
    }

    for( i = 1 ; i <= m ; i++ )
    {
        fin >> qs >> qf ;
        fout<<query( 1, n, 1 ) <<"\n";
    }
}

int main()
{
    citire();
    return 0;
}