Cod sursa(job #1833906)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 23 decembrie 2016 14:49:39
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 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(int A[], int M[][NMAX], int N) {
    for (int i = 0; i < N; ++i) {
        for (int j = i; j < N; ++j) {
            M[i][j] = i;
            for (int k = i; k <= j; ++k) {
                if (A[k] < A[M[i][j]]) {
                    M[i][j] = k;
                }
            }
        }
    }
}

int query(int A[], int M[][NMAX], int N, 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;

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

    return 0;
}