Cod sursa(job #3354199)

Utilizator TeocipTudorica Ciprian Teodor Teocip Data 16 mai 2026 12:25:31
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <utility>
#include <vector>
using namespace std;

vector<vector<int>> r;
vector<int> p2, v;

const int INF = 1e9;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

void precalcul(){
    int n = (v.size() - 1);
    p2.resize(n + 1);
    p2[1] = 0;
    for(int i = 2; i <= n; i++){
        p2[i] = 1 + p2[i / 2];
    }
    int m = 0;
    while((1 << (m + 1)) <= n){
        m++;
    }
    r.resize(m + 1, vector<int>(n + 1, INF));
    r[0] = v;
    for(int i = 1; i <= n; i++){
        for(int j = (1 << i); j <= n; j++){
            int p = (1 << (i - 1));
            r[i][j] = min(r[i - 1][j - p], r[i - 1][j]);
        }
    }
}

int main(){
    int n, q;
    cin >> n >> q;

    for(int i = 1; i <= n; i++) cin >> v[i];
    v.resize(n + 1);

    precalcul();
    for(int i = 0; i < n; i++){
        int st, dr;
        cin >> st >> dr;
        if(st > dr){
            swap(st, dr);
        }
        int k = p2[dr - st + 1];
        int p = (1 << k);
        cout << min(r[k][st + p - 1], r[k][dr]);
    }
    return 0;
}