Cod sursa(job #1707458)

Utilizator teodor440Teodor Tonghioiu teodor440 Data 25 mai 2016 09:49:46
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 100001;
const int L = 17;

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

int n, log[N], r[N][L];

int getMin(int a, int b){
    int l = log[b-a]-1;
    cout << l << " ";
    cout << b << " " << (a+(1<<l)-1) << "\n";
    return min(r[b][l], r[a+(1<<l)-1][l]);
}

int main()
{
    int i, j, k, m, a, b;
    f >> n >> m;
    for(i = 1; i <= n; i++){
        f >> r[i][0];
        log[i] = log[i/2] + 1;
    }
    for(i = 1; i <= n; i++){
        for(j = 1; (1 << j) <= i; j++){
            k = i - (1 << (j-1));
            r[i][j] = min(r[i][j-1], r[k][j-1]);
        }
    }

    for(j = 0; j <= n; j++){
        for(i = 0; i <= n; i++){
            cout << r[i][j] << " ";
        }
        cout << "\n";
    }
    for(i = 1; i <= m; i++) f >> a >> b, g << getMin(a, b) << "\n";

    return 0;
}