Cod sursa(job #3276352)

Utilizator andrei22116Popescu Stefan Andrei andrei22116 Data 13 februarie 2025 14:02:14
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3","Ofast","unroll-loops")

using namespace std;

int n,q;
int look[105][35];
int v[105];
void build(int n)
{
    for(int i=1;i<=n;i++)
        look[i][0]=v[i];

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

int query(int l,int r)
{
    int j=(int)log2(r-l+1);
    if(look[l][j]<=look[r-(1<<j)+1][j])
        return look[l][j];
    else
        return look[r-(1<<j)+1][j];
}

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int l,r;
    cin >> n >> q;
    for(int i=1;i<=n;i++)
    {
        cin >> v[i];
    }
    build(n);
    for(int i=1;i<=q;i++)
    {
        cin >> l >> r;
        cout << query(l,r) << '\n';
    }
    return 0;
}