Cod sursa(job #1169515)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 11 aprilie 2014 16:24:29
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

int N, T;
int RMQ[21][100010];
int lg[1000010];
int x, y, len, step;

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

    for ( int i = 2; i <= N; ++i )
        lg[i] = lg[i>>1]+1;

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

    for ( int i = 1; i <= T; ++i )
    {
        is >> x >> y;
        len = y - x + 1;
        p = lg[len];
        os << min(RMQ[lg[len]][x],RMQ[lg[len]][y-(1<<lg[len])+1]) << '\n';
    }

    return 0;
}