Cod sursa(job #1833902)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 23 decembrie 2016 14:46:45
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 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;
    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;

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

    return 0;
}