Cod sursa(job #1834094)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 23 decembrie 2016 20:51:03
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <iostream>

const int NMAX = 10005;

using namespace std;

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

int Q, x, y;
int M[NMAX][NMAX];
int A[NMAX];
int N;

void preproces() {
    for (int i = 0; i < N; ++i) {
        M[i][i] = i;
    }

    for (int i = 0; i < N; ++i) {
        for (int j = i + 1; j < N; ++j) {
            if (A[j] < A[M[i][j-1]]) {
                M[i][j] = j;
            }
            else {
                M[i][j] = M[i][j-1];
            }
        }
    }
}

int query(int i, int j) {
    return M[i][j];
}

int main() {
    f >> N >> Q;
    for (int i = 0; i < N; ++i) {
        f >> A[i];
    }

    /*clock_t before = clock();
    preproces(A, M, N);
    clock_t difference = clock() - before;
    double msec = difference * 1000 / CLOCKS_PER_SEC;
    cout << msec;*/

    preproces();

    while(Q--) {
        f >> x >> y;
        g << A[query(x-1, y-1)] << '\n';
    }

    return 0;
}