Cod sursa(job #2796280)

Utilizator casiannCasian casiann Data 7 noiembrie 2021 20:31:32
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
using namespace std;
 
#define MAXN 100003
#define MAXLOGN 20

ifstream fin("rmq.in");
ofstream fout("rmq.out");
 
int n, m, a[MAXN][MAXLOGN], v[MAXN];
 
int main(){
    fin >> n >> m ;
    for(int i=1; i<=n; i++)
    {
        fin >> v[i];
        a[i][0] = v[i];
    }
    // preprocesare
    for(int j=1; j<= MAXLOGN; j++)
        for(int i=1; i<=n-(1<<j)+1; i++)
        {
            a[i][j] = min(a[i][j-1], a[i+1<<(j-1)][j-1]);
        }
    for(int i=1; i<=m; i++)
    {
        int st, dr, dist, logg;
        fin >> st >> dr;
        dist = dr-st+1;
        logg = log2(dist);
        fout << min(a[st][logg], a[dr- (1<<logg) + 1][logg]) << '\n';
    }
    return 0;
}