Cod sursa(job #2686495)

Utilizator LorenaMariaHantig Lorena LorenaMaria Data 19 decembrie 2020 11:18:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,a,b,v[4000001],maxi;
void update(int nod,int st,int dr)
{ if(st>a || dr<a)
     return;
  if(st==dr)
  { v[nod]=b;
    return;
  }
  update(2*nod,st,(st+dr)/2);
  update(2*nod+1,(st+dr)/2+1,dr);
  v[nod]=max(v[nod*2],v[nod*2+1]);
}
void querry(int nod,int st,int dr)
{ if(a<=st && dr<=b)
  { maxi=max(maxi,v[nod]);
    return;
  }
  if(dr<a || st>b)
     return;
  querry(2*nod,st,(st+dr)/2);
  querry(2*nod+1,(st+dr)/2+1,dr);
}
int main()
{ in>>n>>m;
  int p=1;
  while(p<n)
    p*=2;
  for(int i=1;i<=n;i++)
  { in>>b; a=i;
    update(1,1,p);
  }
  for(int i=1;i<=m;i++)
  { int c;
    in>>c>>a>>b;
    if(c==0)
    { maxi=0;
      querry(1,1,p);
      out<<maxi<<'\n';
    }
    else
      update(1,1,p);
  }
  in.close();
  out.close();
  return 0;
}