Cod sursa(job #3153230)

Utilizator ArseniuVictorStefanArseniu Victor Stefan ArseniuVictorStefan Data 28 septembrie 2023 17:49:25
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>

#define NMAX (100000)
#define INF (0x7fffffff)

int n, q, tree[2 * NMAX];

int min(int x, int y)
{
    return x <= y ? x : y;
}

int& set_min(int& x, int y)
{
    if(y < x) x = y;
    return x;
}

int query(int l, int r)
{
    int ans = INF;
    for(l += n, r += n; l < r; l >>= 1, r >>= 1)
    {
        if(l & 1) set_min(ans, tree[l++]);
        if(r & 1) set_min(ans, tree[--r]);
    }
    return ans;
}

int main()
{
    freopen("rmqsq.in", "r", stdin);
    freopen("rmqsq.out", "w", stdout);

    scanf("%d %d", &n, &q);
    for(int i = 0; i < n; i++)
        scanf("%d", &tree[i + n]);

    for(int i = n - 1; i >= 1; i--)
        tree[i] = min(tree[i << 1], tree[i << 1 | 1]);

    for(int i = 0; i < q; i++)
    {
        int l, r;
        scanf("%d %d", &l, &r);

        printf("%d\n", query(l - 1, r));
    }

    return 0;
}