Cod sursa(job #1664821)

Utilizator cristinamateiCristina Matei cristinamatei Data 26 martie 2016 14:40:03
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 100003;
const int M = 1000003;
int n, m;
int v[N], r[N][N/100], log[N];

int min( int x, int y )
{
    if ( x < y )
        return x;
    return y;
}

int main()
{
    int i, j, k, a, b;
    in >> n >> m;
    for ( i = 1; i <= n; i++ )
        in >> v[i];

    log[1] = 0;
    for ( i = 2; i <= n; i++ )
        log[i] = log[i/2]+1;
    for ( i = 1; i <= n; i++ )
    {
        r[i][0] = v[i];
        for ( j = 1; (1<<j) <= i; j++ )
        {
            k = i-(1<<(j-1));
            r[i][j] = min(r[i][ j-1 ], r[k][ j-1 ] );
        }
    }

    for ( i = 1; i <= m; i++ )
    {
        in >> a >> b;
        out << min( r[b][log[b-a+1] ], r[a+(1<<log[b-a+1]) -1][log[b-a+1] ] )<<'\n';
    }
    return 0;
}