Cod sursa(job #2222879)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 18 iulie 2018 13:39:46
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 2e5+5;
int aint[NMAX],n;

void update(int k, int val)
{
    k+=n;
    aint[k] = val;
    for (; k>1; k>>=1)
        aint[k>>1] = max(aint[k],aint[k^1]);
}
int query(int st, int dr)
{
    int ans = 0;
    st+=n;
    dr+=n;
    for (; st<dr; st>>=1, dr>>=1)
    {
        if (st&1)
           ans = max(ans,aint[st++]);
        if (dr&1)
           ans = max(ans,aint[--dr]);
    }
    return ans;
}

int main()
{
    int m;
    in >> n >> m;
    for (int i = 0; i<n; i++)
        in >> aint[i+n];
    for (int i = n-1; i>0; i--)
        aint[i] = max(aint[i<<1],aint[i<<1|1]);
    for (int i = 0; i<m; i++)
    {
        int t,x,y;
        in >> t >> x >> y;
        if (t == 1)
            update(x-1,y);
        else
            out << query(x-1,y) << "\n";
    }
}