Cod sursa(job #3155158)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 7 octombrie 2023 15:04:58
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

long long v[100001],lg[100001];
long long ST[10001][10001];

void BuildST(long long v[],long long n){
    for (int i = 0;i<n;++i){
        ST[i][0] = v[i];
    }
    int k = lg[n];
    for (int j = 1;j<=k;++j){
        for(int i=0;i+(1<<j)-1<n;++i){
            ST[i][j] = min(ST[i][j-1],ST[i+(1<<(j-1))][j-1]);
        }
    }
}

int query(int i, int j){
    int len = j-i+1;
    int k = lg[j - i + 1];
    return min(ST[i][k], ST[i+len-(1<<k)][k]);
}

int main()
{
    long long n,m;
    fin >> n >> m;
    for (int i=0;i<n;++i){
        fin >> v[i];
    }
    for(int i=2; i<=100000; i++)
        lg[i] = 1 + lg[i/2];
    BuildST(v,n);
    for (int i=1;i<=m;++i){
        int s,f;
        fin >> s >> f;
        fout << query(s,f) << '\n';
    }
    return 0;
}