Cod sursa(job #2903527)

Utilizator bogdaniliBogdan Iliescu bogdanili Data 17 mai 2022 17:40:27
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

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

int v1=-100000000000, v2=-10000000000000;
int aint[400004],q,w,i,x,a,b;

int query(int n, int left, int right, int a, int b)
{
    if (right<a || left>b)
        return 0;

    if (a<=left && right<=b)
        return aint[n];

    int mid= (left+right)/2;

    v1=query(2*n, left, mid, a, b);
    v2=query(2*n+1, mid+1, right, a, b);

    return max(v1,v2);

}

void update(int n, int left, int right, int pos, int val)
{
    if (pos<left || pos>right)
        return;

    if (left==right)
    {
        aint[n]=val;
        return;
    }

    int mid= (left+right)/2;

    if (pos<=mid)
        update(2*n, left, mid, pos, val);
    else
        update(2*n+1, mid+1, right, pos, val);

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

}


int main()
{

    f>>q>>w;  /// q= nr de elemente   w=nr de operatii

    for (i=1;i<=q;i++)
    {
        f>>x;
        update(1,1,q,i,x);
    }


    for ( int i = 1; i <= w; i++ )
    {
        f>>x>>a>>b;
        if ( x == 0 )
        {
             g<<query(1,1,q,a,b)<<'\n';

        }
        else
        {
            update(1,1,q,a,b);
        }
    }


    return 0;
}