Cod sursa(job #2668518)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 4 noiembrie 2020 23:19:19
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,t,a,b,max1,i;
int v[50005];
void update(int poz, int st, int dr)
{
    int mid;
    if(st==dr)
    {
        v[poz]=b;
    }
    else
    {
        mid=(st +dr)/2;
        if(a<=mid) update(2*poz,st,mid);
        else update(2*poz+1,mid+1,dr);
        v[poz]=max(v[2*poz],v[2*poz+1]);
    }
}
void q(int poz,int st,int dr)
{
    int mid;
    if(a<=st&&dr<=b)
    {
        max1=max(max1,v[poz]);
        return;
    }
    mid=(st+dr)/2;
    if(a<=mid)q(2*poz,st,mid);
    if(b>mid)q(2*poz+1,mid+1,dr);
}
int main()
{

    fin>>n>>m;
    for(i=1; i<=n; i++)
    {
        fin>>b;
        a=i;
        update(1,1,n);
    }
    for(i=1; i<=m; i++)
    {
        fin>>t>>a>>b;
        if(t==0)
        {
            max1=0;
            q(1,1,n);
            fout<<max1<<'\n';
        }
        else update(1,1,n);
    }
    return 0;
}