Cod sursa(job #3271867)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 27 ianuarie 2025 16:31:49
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("rmq.in");
ofstream g ("rmq.out");

const int NMAX = 1e5;

int rmq[18][NMAX+1], n, v[NMAX+1], q;

int calc_min(int x, int y){
    
    if(x > y)
        swap(x, y);
        
    int dist = log2(y - x + 1);
    
    return min(rmq[dist][x], rmq[dist][y - (1 << dist) + 1]);
    
}

int main()
{
    
    f >> n >> q;
    for(int i=1; i<=n; i++)
        f >> v[i];
        
    for(int i=1; i<=n; i++)
        rmq[0][i] = v[i];
        
    for(int i = 1; (1 << i) <= n; i++){
        
        for(int j=1; j<=n; j++){
            
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1 << (i-1))]);
            
        }
        
    }
    
    
    for(int i=1; i<=q; i++){
        
        int x, y;
        f >> x >> y;
        
        g << calc_min(x, y) << "\n";
        
    }
    

    return 0;
}