Cod sursa(job #1891326)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 23 februarie 2017 22:03:45
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
using namespace std;
ofstream fout ("rmq.out");
ifstream fin ("rmq.in");
int v[ 20 ][ 100005 ],lg[ 100005 ],n,m,i,j,a,b,x;
int main()
{
    fin>>n>>m;
    for( i = 1 ; i <= n ; i++ )
    {
        fin>>v[ 0 ][ i ];
    }
    for( i = 2 ; i <= n ; i++ )
        lg[ i ] = lg[ i / 2 ] + 1;
    for( i = 1 ; i <= lg[ n ] ; i++ )
    {
        for( j = 1 ; j + ( 1 << i ) - 1 <= n ; j++ )
        {
            v[ i ][ j ] = min( v[ i - 1 ][ j ] , v[ i - 1 ][ j + ( 1 << ( i - 1 ) )]);
        }
    }
    for( i = 1 ; i <= m ; i++ )
    {
        fin>>a>>b;
        x = lg[ b - a + 1 ];
        fout<<min( v[ x ][ a ] ,v[ x ][ b - ( 1 << x ) + 1 ] )<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}