Cod sursa(job #2752544)

Utilizator pizzandreeaCiurescu Andreea pizzandreea Data 18 mai 2021 14:36:36
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#define MAX 10001

using namespace std;

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

int N, M;
int lookup[MAX][MAX];
int v[MAX];

void preprocess(int v[], int N){

    for(int i = 1; i <= N; i++){
        lookup[i][i] = i;
    }

    for (int i = 1; i <= N; i++) {
        for (int j = i + 1; j <= N; j++)    
            if (v[lookup[i][j - 1]] < v[j])
                lookup[i][j] = lookup[i][j - 1];
            else
                lookup[i][j] = j;
    }
}

int rmq(int v[], int N, int st, int dr){
    return v[lookup[st][dr]];
    
}

void read(){

    int st, dr;

    fin >> N >> M;

    for(int i = 1; i <= N; i++){
        fin >> v[i];
        
    }
    preprocess(v, N);

    for(int i = 1; i <= M; i++){
        fin >> st >> dr;

        fout << rmq(v, N, st, dr) << "\n";
    }


}

int main(){

    read();
    
    return 0;
}