Cod sursa(job #3209877)

Utilizator ililogIlinca ililog Data 3 martie 2024 18:09:08
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
using namespace std;
#include<iostream>
#include<fstream>
#include<algorithm>

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

int n, m;
int rmq[20][100001];
int p2[100001];

int main() {
    
    fin >> n >> m;
    for (int i = 1; i<=n; i++) {
        fin >> rmq[0][i];
    }

    p2[1] = 0;
    for (int i = 2; i<=n; i++) {
        p2[i] = p2[i/2]+1;
    }
    
    for (int i = 1; (1<<i)<=n; i++) {
        for (int j = 1; j<=n-(1<<i)+1; j++) {
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
        }
    }
    
    
    for (int i = 1; i<=m; i++) {
        int a, b;
        fin >> a >> b;
        int l = b-a+1;
                
        fout << min(rmq[p2[l]][a], rmq[p2[l]][b-(1<<p2[l])+1]) << "\n";
    }
    
    return 0;
}