Cod sursa(job #1679028)

Utilizator filip.dutescuDutescu Filip Ioan filip.dutescu Data 7 aprilie 2016 17:18:19
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100005;
int n, m, a, b, v[N], r[N][18], log[N];

int mini(int n, int m)
{
    if(n>m) return m;
    else return n;
}

int main()
{
    in>>n>>m;
    for(int i = 1; i <= n; i++){
        in>>v[i];
    }
    for(int i = 2; i <= n; i++)
        log[i]=1+log[i/2];

    for(int i = 1; i <= m; i++){
        r[i][0] = v[i];
        for(int j = 1;(1<<j) <= i; j++)
            r[i][j] = mini(r[i][j-1], r[i-(1<<(j-1))][j-1]);
    }
    int l;
    for(int i = 1; i <= m; i++){
        in>>a>>b;
        l = log[a-b+1];
        out<<mini(r[b][l], r[a+(1<<L)-1][l]);
    }
    return 0;
}