Cod sursa(job #2969068)

Utilizator octavi26octavian octavi26 Data 22 ianuarie 2023 15:47:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define N 100008
#define inf 1e9

using namespace std;

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

int n, q;
int v[N];
int Log[N];
int R[N][26];

void Precalculare()
{
    int i, j;
    for( i=2; i<=n; i++ )
        Log[i] = Log[i / 2] + 1;

    for( i=1; i<=n; i++ )
        R[i][0] = v[i];

    for( j=1; j<=Log[n]; j++ )
        for( i=1; i + (1<<j) - 1 <= n; i++ )
            R[i][j] = min( R[i][j - 1], R[i + (1 << (j - 1))][j - 1] );
}

void Citire()
{
    int i;
    fin >> n >> q;
    for( i=1; i<=n; i++ )
        fin >> v[i];

    Precalculare();
}

void Rezolvare()
{
    int st, dr;
    while( q-- )
    {
        fin >> st >> dr;
        int len = dr - st + 1;
        int k = Log[len];
        fout << min( R[st][k], R[dr - (1<<k) + 1][k] ) << "\n";
    }
}

int main()
{
    Citire();
    Rezolvare();
    return 0;
}