Cod sursa(job #1523635)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 12 noiembrie 2015 21:57:22
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>

#define NMax 110

using namespace std;

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

int n, queries, rmq[17][NMax], lg[NMax];

int getMin(int a, int b)
{
    if (a < b)
        return a;
    return b;
}

int main()
{
    f>>n>>queries;
    for (int i=1; i<=n; i++)
        f>>rmq[0][i];
    
    for (int i=2; i<=n; i++)
        lg[i] = lg[i/2] + 1;
    
    for (int i=1; i<=lg[n]; i++)
        for (int j=1; j<=n - lg[i] + 1; j++)
                rmq[i][j] = getMin(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
    
    int a, b;
    for (int i=1; i<=queries; i++) {
        f>>a>>b;
        
        int l = lg[b-a+1];
        g<<getMin(rmq[l][a], rmq[l][b - (1<<l) + 1])<<"\n";
    }
    
    return 0;
}