Cod sursa(job #2748919)

Utilizator smoc_georgemarianSmoc George-Marian smoc_georgemarian Data 4 mai 2021 00:51:11
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

 const int NMAX=(int)1e5+3; 
class aint
{   

    int a[4*NMAX];
    int v[NMAX];
    public:
    aint()
    {
        memset(a,0,sizeof(a));
    }
    void set(int *val, int n)
    {
        int i;
        for(i=1;i<=n;i++)
        {
            v[i]=val[i];
        }

    }
    void build(int node, int st, int dr)
    {
        if(st==dr)
          {a[node]=v[st];return;}
        build(2*node, st, (st+dr)/2);
        build(2*node+1,  (st+dr)/2+1,dr);
        a[node]= max(a[2*node], a[2*node+1]);

    }
    void update(int node, int st, int dr,int poz, int value)
    {
        if(st==dr)
        {
            a[node]=value;return;
        }
        int mj=(st+dr)/2;
        if( poz<=mj )
          update(2*node, st,mj,poz,value);
          else
          update(2*node+1,mj+1,dr,poz,value);
        a[node]= max(a[2*node],a[2*node+1]);

    }
    int  query(int node, int st, int dr, int left, int right)
    {
        if(  left<=st && dr<=right )
           return a[node];
        int mj=(st+dr)/2;
        int rez1=0;
        int rez2=0;
        if(  left<=mj )
          rez1= query(2*node, st,mj, left,right);
        if(  right>mj )
          rez2= query(2*node+1, mj+1,dr, left,right);
            
        return max(rez1,rez2);
        
    }
    
};

aint a;
int main()
{
    int n,k;
    int i;
    int v[NMAX];
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {   
        fin>>v[i];
        
    }
    a.set(v,n);
    a.build(1,1,n);
    for(i=1;i<=k;i++)
    {
        int cer;
        fin>>cer;
        int x,y;
        if(cer==0)
        {
            fin>>x>>y;
            fout<< a.query(1,1,n,x,y)<<"\n";

        }
        else
        {
            fin>>x>>y;
            a.update(1,1,n,x,y);
        }
    }



}