Cod sursa(job #2903540)

Utilizator bogdaniliBogdan Iliescu bogdanili Data 17 mai 2022 17:46:28
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>

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

long long 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];

    long long v1=-10000000, v2=-1000000;
    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 ( 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;
}