Cod sursa(job #2303535)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 16 decembrie 2018 15:04:27
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int nr1,nr2,mx,ar[400005];
void upd(int nr,int l,int r)
{
    if(l==r)
    {
        ar[nr]=nr2;
        return;
    }
    int mid=(l+r)/2;
    if(nr1<=mid)
        upd(2*nr,l,mid);
    else
        upd(2*nr+1,mid+1,r);
    ar[nr]=max(ar[2*nr],ar[2*nr+1]);
}
void q(int nr,int l,int r)
{
    if(nr1<=l&&nr2>=r)
    {
        mx=max(mx,ar[nr]);
        return;
    }
    int mid=(l+r)/2;
    if(nr1<=mid)
        q(2*nr,l,mid);
    if(nr2>mid)
        q(2*nr+1,mid+1,r);
}
int main()
{
    int n,m,i;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>nr2;
        nr1=i;
        upd(1,1,n);
    }
    while(m--)
    {
        in>>i>>nr1>>nr2;
        if(i==0)
        {
            mx=-1;
            q(1,1,n);
            out<<mx<<"\n";
        }
        else
            upd(1,1,n);
    }
    return 0;
}