Cod sursa(job #2833638)

Utilizator anghelpatrickPatrick Anghel anghelpatrick Data 15 ianuarie 2022 14:13:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define INF 1000000000
using namespace std;

ifstream fin ("rmq.in");
ofstream fout("rmq.out");

int r[17][100010];
int e2[100010];

int n, m, i, j, st, dr, minim, p, e, len;
int main ()
{
    fin >> n >> m ;
    for ( i = 1 ; i <= n ; i ++ )
        fin >> r[0][i] ;

    for ( p = 1 ; (1<<p) <= n ; p ++ )
        for ( i = 1 ; i <= n ; i ++ )
        {
            r[p][i] = r[p-1][i];
            j = i + ( 1 << ( p - 1 ) ) ;
            if (j <= n && r[p][i] > r[p-1][j])
                r[p][i] = r[p-1][j];
        }
    e2[1] = 0;
    for ( i = 2 ; i <= n ; i ++ )
        e2[i] = 1 + e2[i/2] ;

    for ( i = 1 ; i <= m ; i ++ )
    {
        fin >> st >> dr ;
        e = e2[dr-st+1] ;
        len = ( 1 << e );
        int fac1 = r[e][st] ;
        int fac2 = r[e][dr-len+1] ;
        fout<<min(fac1, fac2 )<<"\n";
    }
}