Cod sursa(job #2945777)

Utilizator Andrei_EneaAndrei Enea Andrei_Enea Data 24 noiembrie 2022 08:31:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>

using namespace std;
long long st[400001];
void update(long long node,long long from,long long to,long long pos,long long val)
{
      if(from==to)
      {
            st[node]=val;
            return;
      }
      long long mid=(from+to)/2;
      if(pos<=mid)
            update(node*2,from,mid,pos,val);
      else
            update(node*2+1,mid+1,to,pos,val);
      st[node]=max(st[node*2],st[node*2+1]);
}
long long query(long long node,long long from,long long to,long long l,long long r)
{
      long long smin=0;
      if(l<=from&&to<=r)
      {
            return st[node];
      }
      long long mid=(from+to)/2;
      if(l<=mid)
      {
            long long s=query(node*2,from,mid,l,r);
            smin=max(smin,s);
      }
      if(mid+1<=r)
      {
            long long s=query(node*2+1,mid+1,to,l,r);
            smin=max(smin,s);
      }
      return smin;
}
int main()
{
      ifstream cin("arbint.in");
      ofstream cout("arbint.out");
    long long n,t,a,b,c;
    cin>>n>>t;
    for(long long i=1;i<=n;i++)
    {
          long long x;
          cin>>x;
          update(1,1,n,i,x);
    }
    for(long long i=0;i<t;i++)
    {
          cin>>a>>b>>c;
          if(a==1)
          {
                update(1,1,n,b,c);
          }
          else
          {
                cout<<query(1,1,n,b,c)<<'\n';
          }
    }
    return 0;
}
//100000000000000