Cod sursa(job #1312759)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 9 ianuarie 2015 21:52:35
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

const int NMax = 100005;
int M[NMax][20];

int main()
{
    int n,m,x,y,k,dif,p;
    f >> n >> m;
    for(int i = 0; i < n; i++)
        f >> M[i][0];
    for(int j = 1; (1 << j) <= n; j++){
        for(int i = 0; i + (1 << j) - 1 < n; i++){
            M[i][j] = min(M[i][j-1],M[i+(1<<(j-1))][j-1]);
        }
    }
    for(int i = 1; i <= m; i++){
        f >> x >> y;
        dif = y - x + 1;
        k = log2(dif);
        p = dif - (1 << k);
        x--;
        g << min(M[x][k],M[x+p][k]) << "\n";
    }
    return 0;
}