Cod sursa(job #3227697)

Utilizator szaszgeri94Szasz Gergely szaszgeri94 Data 2 mai 2024 14:38:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#define K 30
#define nMax 100002
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
 
long long n, q, x, y, a[nMax], m[nMax][K];
 
int query(int x, int y){
    int l = y - x;
    int log = 0;
    while(1 << (log+1) <= l)
        log++;
    return min(m[x][log], m[y - (1<<log)+1][log]);
}
 
void read(){
    fin >> n >> q;
    for(int i = 0; i < n; i++)
        fin >> a[i]; 
}
 
void pre(){
    int log = 30;
    for(int i = 0; i < n; i++)
        m[i][0] = a[i];
    for(int k = 1; k < log; k++){
        for(int i = 0; i + (1 << k) - 1 < n; i++){
            m[i][k] = min(m[i][k-1], m[i+(1<<(k-1))][k-1]);
        }
    }
}
 
void solve(){
    for(int i = 1; i <= q; i++){
        fin >> x >> y;
        fout << query(x-1, y-1) << '\n';
    }
}
 
int main()
{
    read();
    pre();
    solve();
    return 0;
}