Cod sursa(job #2718962)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 9 martie 2021 13:42:30
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda no-time-to-rest Marime 0.94 kb
#include <bits/stdc++.h>

#define zeros(x) ((x^(x-1))&x)

using namespace std;

ifstream f("aib.in");
ofstream g("aib.out");

int n,q,aib[400005],v[100005],x,maxim;

void edit(int nod,int st,int dr,int a,int b)
{
  if(st==dr){
   aib[nod]=x;
   return;
  }
  int mid=(st+dr)/2;
  if( a<=mid ) edit(2*nod,st,mid,a,b);
  if( mid<b ) edit(2*nod+1,mid+1,dr,a,b);

  aib[nod]=max(aib[nod*2],aib[nod*2+1]);
}

void compute(int nod,int st,int dr,int a,int b)
{
  if(a<=st&&dr<=b){
   maxim=max(maxim,aib[nod]);
   return;
  }
  int mid=(st+dr)/2;
  if( a<=mid ) compute(2*nod,st,mid,a,b);
  if( mid<b ) compute(2*nod+1,mid+1,dr,a,b);
}

int main()
{
 f>>n>>q;
 for(int i=1;i<=n;i++){
    f>>v[i];
    x=v[i];
    edit(1,1,n,i,i);
 }

 for(int i=1;i<=q;i++)
 {
  int t,a,b;
  f>>t>>a>>b;
  if(t==1){
    x=b;
    edit(1,1,n,a,a);
  }
  if(t==0){
    maxim=0;
    compute(1,1,n,a,b);
    g<<maxim<<'\n';
  }
 }

}