Cod sursa(job #2238744)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 7 septembrie 2018 12:52:47
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 1e5+5;
int tree[4*NMAX],pos,val,l,r,rez;
void update(int root, int st, int dr)
{
    if (st == dr)
        tree[root] = val;
    else
    {
        int m = (st+dr)/2;
        if (pos<=m)
            update(2*root,st,m);
        else
            update(2*root+1,m+1,dr);
        tree[root] = max(tree[2*root],tree[2*root+1]);
    }
}

void query(int root, int st, int dr)
{
    if (l<=st && dr<=r)
        rez = max(rez,tree[root]);
    else
    {
        int m = (st+dr)/2;
        if (l<=m)
            query(2*root,st,m);
        if (r>m)
            query(2*root+1,m+1,dr);
    }
}

int main()
{
    int n,m;
    in >> n >> m;
    for (int i = 1; i<=n; i++)
    {
        int x;
        in >> x;
        pos = i;
        val = x;
        update(1,1,n);
    }
    for (int i = 1; i<=m; i++)
    {
        int t,x,y;
        in >> t >> x >> y;
        if (!t)
        {
            rez = -1;
            l = x;
            r = y;
            query(1,1,n);
            out << rez << "\n";
        }
        else
        {
            pos = x;
            val = y;
            update(1,1,n);
        }
    }
}