Cod sursa(job #1315510)

Utilizator retrogradLucian Bicsi retrograd Data 12 ianuarie 2015 21:11:21
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>

#define MAXN 100001

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int RMQ[18][MAXN], lg[18];

int i, j;
void init (int n) {
    for(i = 1; i <= lg[n]; i ++) {
        for(j = 1; j <= n - (1 << i) + 1; j ++) {
            RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j + (1 << (i-1))]);
        }
    }
}

int rmq (int b, int e) {
    i = lg[e - b + 1];
    j = e - (1 << i) + 1;
    return min(RMQ[i][b], RMQ[i][j]);
}



int main() {
    int n, q, b, e;
    lg[0] = -1;
    fin>>n>>q;
    for(int i=1; i<=n; i++) {
        fin>>RMQ[0][i];
        lg[i] = lg[i/2] + 1;
    }

    init(n);

    while(q--) {
        fin>>b>>e;
        if(b>e) swap(b, e);
        fout<<rmq(b, e)<<"\n";
    }

    return 0;
}