Cod sursa(job #1296959)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 21 decembrie 2014 16:41:31
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;
int x[300000], L, R, s, d, q, n, i, p;
int query(int nod, int l, int r)
{
    if(s <= l && d >= r)
        return x[nod];
    if(d < l || r < s)
        return 0;
    int m = (l + r) / 2;
    return max(query(2 * nod, l, m), query(2 * nod + 1, m + 1, r));
}
int main()
{
    freopen("saracsaurege.in", "r", stdin);
    freopen("saracsaurege.out", "w", stdout);
    scanf("%d%d", &n, &q);
    for(p = 1; ; p <<= 1)
        if(p>=n)
            break;
    p--;
    for(i = 1; i <= n; i++)
        scanf("%d", &x[i + p]);
    for(i = p; i; i--)
        x[i] = max(x[2 * i], x[2 * i + 1]);
    for(; q; q--)
    {
        scanf("%d%d", &s, &d);
        printf("%d\n", query(1, 1, p + 1));
    }
    return 0;
}