Cod sursa(job #1680222)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 8 aprilie 2016 16:25:00
Problema Range minimum query Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100005;

int RMQ[18][NMAX],N,M,lg[NMAX];

int main()
{

    lg[1] = 0;
    for(int i = 2 ; i < 100000 ; ++i)
        lg[i] = 1 + lg[i/2];
    in>>N>>M;
    for(int i = 1 ; i <= N ; ++i)
        in>>RMQ[0][i];
    for(int i = 1 ; i <= lg[N] ; ++i )
        for(int j = 1 ; j <= N - (1 << i) + 1 ; ++j)
            RMQ[i][j] = min(RMQ[i-1][j],RMQ[i-1][j + (1 << (i-1))]);
    int x,y;
    for(int i = 1 ; i <= M ; ++i){
        in>>x>>y;
        int log = lg[y - x + 1];
        int diff = y - x + 1 - (1 << log);
        out<<min(RMQ[log][x],RMQ[log][x + diff])<<"\n";
    }
    in.close();
    out.close();
    return 0;
}