Cod sursa(job #3212921)

Utilizator XIIs12sPeteleu Denis Andrei XIIs12s Data 12 martie 2024 12:02:25
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

int segment[3000], arrial[3000],n,m,cer,a,b;
void bulid(int node, int left, int right)
{
    if(left==right)
    segment[node] = arrial[node];
    else
    {
        int middle =(left+right)/2;
        bulid(node*2, left, middle);
        bulid(node*2+1, middle+1, right);
        segment[node]= max(segment[node*2], segment[node*2+1]);
    }
}

void update(int node, int left, int right, int position, int newval)
{
    if(left==right)
    {
        segment[node] = newval;
    }
    else
    {
        int middle = (left+right)/2;
        if(position<=middle)
            update(node*2,left,middle, position, newval);
        else
            update(node*2+1,middle+1, right, position, newval);
    }
}
int query(int node, int left, int right, int querryleft, int querryright)
{
    if(querryleft <= left && right <= querryright)
        return segment[node];
    else
    {
        int middle = (left+right)/2;
        if(querryright <=middle)
            return query(node*2, left, middle, querryleft, querryright);
        if(middle +1 <= querryleft)
            return query(node*2+1, middle+1, right, querryleft, querryright);
        return max(query(node*2, left, middle,querryleft, querryright), query(node*2+1, middle +1, right, querryleft, querryright));
    }
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        f>>arrial[i];
        bulid(1,1,n);
    for(int i=1;i<=m;i++)
    {
        f>>cer>>a>>b;
        if(cer==1)
        {
            g<<query(1,1,n,a,b);
        }
        else
        {
        update(1,1,a,b);
        }
    }
    return 0;
}