Cod sursa(job #2914191)

Utilizator raulandreipopRaul-Andrei Pop raulandreipop Data 19 iulie 2022 11:15:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <vector>
#include <fstream>
#include <cmath>
 
using namespace std;
 
const int rmqMax = log2(100100);
 
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
 
int rmq[100100][30];
int a[100100];
int n;

void initRmq ()
{
    for (int i = 1; i <= n; i++)
    {
        rmq[i][0] = a[i];
    }
    for (int i = 1; i < 30; i++)
    {
        for (int k = 1; k <= n; k++)
        {
            if (k + (1 << (i - 1)) <= n)
            {
                rmq[k][i] = min(rmq[k][i-1], rmq[k + (1 << (i - 1))][i-1]);
            }
        }
    }
}

int queryRmq (int s, int d)
{
    int i = log2(d - s + 1);
    int ans = min(rmq[s][i], rmq[d - (1 << i) + 1][i]);
    return ans;
}

int main() {
    int q;
    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    
    initRmq();

    while (q--)
    {
        int s, d;
        cin >> s >> d;
        cout << queryRmq(s, d) << '\n';
    }
 
    return 0;
}