Cod sursa(job #2632378)

Utilizator AlexMariMarinescu Alexandru AlexMari Data 3 iulie 2020 09:04:59
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n,m;

struct Aint
{
    int v[400005];
    void update(int node,int poz,int l,int r,int val)
    {
        if(l==r)
        {
            v[node]=val;
            return;
        }
        int mijl=(l+r)/2;
        if(poz<=mijl)
            update(2*node,poz,l,mijl,val);
        else
            update(2*node+1,poz,mijl+1,r,val);
        v[node]=max(v[2*node+1],v[2*node]);

    }
    int query(int node,int left,int right,int st,int dr)
    {
        if(right<st||left>dr)
              return 0;
        if(left>=st&&right<=dr)
            return v[node];
        int mijl=(left+right)/2;
        if(dr<=mijl)
            return query(2*node,left,mijl,st,dr);
        else
            if(st>=mijl+1)
            return query(2*node+1,mijl+1,right,st,dr);
        return max(query(2*node,left,mijl,st,dr),query(2*node+1,mijl+1,right,st,dr));
    }
}aint;

int main()
{
    int op,x,y,i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
        {
            fin>>x;
            aint.update(1,i,1,n,x);
        }
    for(i=1;i<=m;i++)
    {
        fin>>op>>x>>y;
        if(op==1)
            aint.update(1,x,1,n,y);
            else
            {
                fout<<aint.query(1,1,n,x,y);
                fout<<'\n';
            }
    }
    return 0;
}