Cod sursa(job #3331250)

Utilizator vladinfo_Grecu Vlad vladinfo_ Data 26 decembrie 2025 01:12:25
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
/// Template Dutzu
#define fast ios_base::sync_with_stdio(false);cin.tie(0);
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n;
int v[100001],bat[1001];
int main()
{
    fast
    int m;
    fin>>n>>m;
    for (int i=1; i<=n; i++)
        fin>>v[i];
    int lg = sqrt(n);
    int nr = (n + lg - 1) / lg;
    for (int i = 1; i <= nr; i++)
    {
        int minim = INT_MAX;
        for (int j = (i - 1) * lg + 1; j <= min(i * lg, n); j++)
            minim = min(minim, v[j]);
        bat[i] = minim;
    }
    for (int l=1; l<=m; l++)
    {
        int a,b;
        fin>>a>>b;
        int blockA = (a - 1) / lg + 1;
        int blockB = (b - 1) / lg + 1;
        int rez = INT_MAX;
        if (blockA == blockB)
        {
            for (int i = a; i <= b; i++)
                rez = min(rez, v[i]);
        }
        else
        {
            for (int i = a; i <= blockA * lg; i++)
                rez = min(rez, v[i]);

            for (int i = blockA + 1; i <= blockB - 1; i++)
                rez = min(rez, bat[i]);

            for (int i = (blockB - 1) * lg + 1; i <= b; i++)
                rez = min(rez, v[i]);
        }
        fout<<rez<<'\n';
    }
    return 0;
}