Cod sursa(job #2333826)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 1 februarie 2019 23:26:25
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>

using namespace std;

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

const int N=100000+7;

int t[4*N];

void upd(int v,int l,int r,int i,int x)
{
        if(l==r)
        {
                t[v]=x;
        }
        else
        {
                int m=(l+r)>>1;
                if(i<=m)
                {
                        upd(2*v,l,m,i,x);
                }
                else
                {
                        upd(2*v+1,m+1,r,i,x);
                }
                t[v]=max(t[2*v],t[2*v+1]);
        }
}

int get(int v,int l,int r,int tl,int tr)
{
        if(r<tl || tr<l)
        {
                return 0;
        }
        if(tl<=l && r<=tr)
        {
                return t[v];
        }
        int m=(l+r)>>1;
        int res=max(get(2*v,l,m,tl,tr),get(2*v+1,m+1,r,tl,tr));
        return res;
}

int main()
{
        freopen("arbint.in","r",stdin);
        freopen("arbint.out","w",stdout);
        int n,q;
        cin>>n>>q;
        for(int i=1;i<=n;i++)
        {
                int x;
                cin>>x;
                upd(1,1,n,i,x);
        }
        while(q--)
        {
                int k,a,b;
                cin>>k>>a>>b;
                if(k==0)
                {
                        cout<<get(1,1,n,a,b)<<"\n";
                }
                else
                {
                        upd(1,1,n,a,b);
                }
        }
        return 0;
}