Cod sursa(job #2466474)

Utilizator dimi999Dimitriu Andrei dimi999 Data 2 octombrie 2019 12:22:33
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

struct Aint
{
    int v[400005];

    void actual(int node,int l,int r,int pos,int val)
    {
        if(l==r)
        {
            v[node] = val;
            return ;
        }

        int mid=(l+r) >> 1;

        if(pos <= mid)
            actual(2*node,l,mid,pos,val);
        else
            actual(2*node+1,mid+1,r,pos,val);
        v[node] = max(v[2*node],v[2*node+1]);
    }

    int intreb(int node,int l,int r,int st,int dr)
    {
        if(dr < l || st > r)
            return 0;

        if(st<=l&&dr>=r)
            return v[node];

        int mid=(l+r) >> 1;

        if(r<=mid)
            return intreb(node*2,l,mid,st,dr);
        else
            if(l>=mid+1)
            return intreb(node*2+1,mid+1,r,st,dr);
        else
            return max(intreb(node*2,l,mid,st,dr),intreb(node*2+1,mid+1,r,st,dr));
    }

}aint;

int main()
{
    int n,m,t,x,y,i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        aint.actual(1,1,n,i,x);
    }
    for(i=1;i<=m;i++)
    {
        fin>>t>>x>>y;
        if(t==0)
            fout<<aint.intreb(1,1,n,x,y)<<" ";
        else
            aint.actual(1,1,n,x,y);
    }

    return 0;
}