Cod sursa(job #2924326)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 29 septembrie 2022 18:50:02
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <cstring>
#include <bitset>
//#include <bits/stdc++.h>

#define ll long long
#define ull unsigned long long
#define MOD 
#define NMAX 100001
#define KMAX 105
#define LIM 1000
#define INF (1LL << 60)
#define LOG 17

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int n, Q;
int a[NMAX];
int RMQ[NMAX][LOG];

int Query(int L, int R)
{
    int lung = R - L + 1;
    int k = 0;
    while (1 << (k + 1) <= lung)
        k++;

    return min(RMQ[L][k], RMQ[R - (1 << k) + 1][k]);
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> Q;
    for (int i = 1; i <= n; i++)
        cin >> a[i];

    for (int i = 1; i <= n; i++)
        RMQ[i][0] = a[i];

    for (int k = 1; k < LOG; k++)
        for (int i = 1; i + (1 << k) - 1 <= n; i++)
            RMQ[i][k] = min(RMQ[i][k - 1], RMQ[i + (1 << k - 1)][k-1]);

    while (Q--)
    {
        int L, R;
        cin >> L >> R;
        cout << Query(L, R) << '\n';
    }
    


    return 0;
}