Cod sursa(job #2753596)

Utilizator StarkillerCalin Stafie Starkiller Data 23 mai 2021 16:35:54
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define NMAX 100010
using namespace std;

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

int n,m, a, b, RMQ[30][NMAX];
unsigned long long puteri2[NMAX];

int main()
{
    fin >> n >> m;
    for (int i = 1 ; i <= n ; ++i)
    {
        fin >> a;
        RMQ[0][i] = a;
    }
    puteri2[0] = 1;
    for (int i = 1 ; i <= n ; ++i)
        puteri2[i] = puteri2[i - 1] * 2;

    for(int i = 1 ; puteri2[i] <= n ; ++i)
    {
        for(int j = 1 ; j + puteri2[i] - 1 <= n ; ++j)
            RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + puteri2[i - 1]]);
    }

    for(int i = 1 ; i <= m ; ++i)
    {
        fin >> a >> b;
        int logaritm = int(log2(b - a + 1));
        int val = min(RMQ[logaritm][a], RMQ[logaritm][b - puteri2[logaritm] + 1]);
        gout << val << '\n';
    }

    return 0;
}