Cod sursa(job #2190183)

Utilizator cc4infinityCojocaru Catalin cc4infinity Data 29 martie 2018 22:32:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
int n,m,i,j,val,b,t[2000000],a,c,M;

void update(int nod,int x,int y)
{
    if (x==y) t[nod]=val;
    else
    {
        int mid=(x+y)/2;
        if (i>mid) update(nod*2+1,mid+1,y);
            else update(nod*2,x,mid);
        t[nod]=max(t[nod*2],t[nod*2+1]);
    }
}

void maxim(int nod,int x,int y)
{
    if (a<=x && y<=b){ if (M<t[nod]) M=t[nod]; }else
    {
        int mid=(x+y)/2;
        if (mid>=a) maxim(nod*2,x,mid);
        if (mid<b)  maxim(nod*2+1,mid+1,y);
    }
}

int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
    fin>>n>>m;
    for (i=1;i<=n;i++)
    {
        fin>>val;
        update(1,1,n);
    }
    for (j=1;j<=m;j++)
    {
        fin>>c>>a>>b;
        if (c==1) {i=a; val=b; update(1,1,n);} else
            {
                M=0;
                maxim(1,1,n);
                fout<<M<<"\n";
            }
    }
    return 0;
}