Cod sursa(job #2904728)

Utilizator florina15Florina florina15 Data 18 mai 2022 00:56:45
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int a, b, maxim[300010], maxim2, x, n, m, operatie;

void modif(int ind, int st, int dr)
{
    if(st == dr) maxim[ind] = x;
    else
    {
        int mij = (st+dr)>>1;
        if(mij >= a) modif(ind*2, st, mij);
        else modif(ind*2+1,mij+1,dr);
        maxim[ind]=max(maxim[ind*2],maxim[ind*2+1]);
    }
}
void f1(int ind, int st, int dr)
{
    if(st >= a && dr<= b) maxim2 = max(maxim2, maxim[ind]);
    else
    {
        int mij = (st+dr)/2;
        if(a <= mij) f1(ind*2, st, mij);
        if(b > mij) f1(ind*2+1, mij+1,dr);
    }
}
int main()
{
    int i;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        a = i;
        modif(1,1,n);
    }
    for(i=1;i<=m;i++)
    {
        f>>operatie>>a>>b;
        if(operatie==1)
        {
            x = b;
            modif(1,1,n);
        }
        else
        {
            maxim2 = 0;
            f1(1,1,n);
            g<<maxim2<<endl;
        }
    }
    return 0;
}