Cod sursa(job #3228626)

Utilizator ReBeGhElRebegea Stefan ReBeGhEl Data 9 mai 2024 11:23:24
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

vector < int > aint;

int pos, val,ql,qr;

void update(int l , int r, int nod)
{
    int mid=(l+r)/2;
    if(l==r)
    {
        aint[nod]=val;
        return ;
    }

    if(pos>=mid+1)
        update(mid+1,r,2*nod+1);
    if(pos<=mid)
        update(l,mid,2*nod);

    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}

int query(int l, int r , int nod)
{
    int mid=(l+r)/2;
    int ret=0;

    if(l>=ql && r<=qr)
        return aint[nod];
    if(mid>=ql)
        ret=max(ret,query(l,mid,2*nod));
    if(mid+1<=qr)
        ret=max(ret,query(mid+1,r,2*nod+1));
    return ret;
}

int main()
{
    int n,q,tip,a,b;
    cin>>n>>q;
    aint.resize(8*n+1);
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        pos=i;
        val=a;
        update(1,n,1);
    }
    while(q--)
    {
        cin>>tip>>a>>b;
        if(tip==0)
        {
            ql=a;
            qr=b;
            cout<<query(1,n,1)<<'\n';
        }
        else
        {
            pos=a;
            val=b;
            update(1,n,1);
        }
    }
    return 0;
}