Cod sursa(job #3179577)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 3 decembrie 2023 21:38:51
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

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

const int bsize = 220;

int n,q,a[100005];
int bmin[1005];

int main()
{
    in >> n >> q;
    for (int i = 1; i <= n; i++)
        in >> a[i];
    for (int i = 0; i <= n / bsize; i++)
        bmin[i] = 1e9;
    for (int i = 1; i <= n; i++)
        bmin[i / bsize] = min(bmin[i / bsize],a[i]);
    for (int i = 1; i <= q; i++)
    {
        int l,r;
        in >> l >> r;
        int bucketl = l / bsize,bucketr = r / bsize;
        if (bucketl + 1 >= bucketr)
        {
            int minim = 1e9;
            for (int j = l; j <= r; j++)
                minim = min(minim,a[j]);
            out << minim << '\n';
        }
        else
        {
            int minim = 1e9;
            for (int j = l; j < bsize * (bucketl + 1); j++)
                minim = min(minim,a[j]);
            for (int j = bsize * bucketr; j <= r; j++)
                minim = min(minim,a[j]);
            for (int j = bucketl + 1; j < bucketr; j++)
                minim = min(minim,bmin[j]);
            out << minim << '\n';
        }
    }
    return 0;
}