Cod sursa(job #1169480)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 11 aprilie 2014 14:33:08
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
using namespace std;

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

int N, T;
int RMQ[100002][17];
int x, y, len, step;

int main()
{
    is >> N >> T;
    for ( int i = 1; i <= N; ++i )
        is >> RMQ[0][i];

    for ( int k = 1; (1 << k) <= N; ++k )
        for ( int i = 1; (i + 1<<(k-1))-1 <= N; i++ )
            RMQ[k][i] = min(RMQ[k-1][i],RMQ[k-1][i+(1<<(k-1))]);

    for ( int i = 1; i <= T; ++i )
    {
        is >> x >> y;
        len = y - x + 1;

        for ( step = 1; 1<<step <= len; ++step );
        step--;

        os << min(RMQ[step][x],RMQ[step][y-(1<<step)+1])<<'\n';
    }

    return 0;
}