Cod sursa(job #3002517)

Utilizator CzarPopescu Cezar Stefan Cristian Czar Data 14 martie 2023 20:52:35
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb

#include <iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m;
struct query{
    int l, r;
};
vector<int>v;
int look[10001][10001];

void preprocess() {
    for (int i = 0; i < n; i++) {
        look[i][i] = i;
    }
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (v[look[i][j - 1]] < v[j]) {
                look[i][j] = look[i][j-1];
            }
            else {
                look[i][j] = j;
            }
        }
    }
}

void solve() {
    while(m--){
        query q;
        in >> q.l >> q.r;
        q.l--;
        q.r--;
        if (q.l > q.r)swap(q.l, q.r);
        //out << q.l << " " << q.r << endl;
        out << v[look[q.l][q.r]]<<"\n";
    }
}
void afisare() {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            out << look[i][j] << " ";
        }
        out << endl;
    }
}
int main()
{
    in >> n >> m;
    for (int i = 0; i < n; i++) {
        int x;
        in >> x;
        v.push_back(x);
    }
    preprocess();
    //afisare();
    solve();
}