Cod sursa(job #2292886)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 30 noiembrie 2018 10:31:43
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a,b,sol,n,m,i,tip;
int v[400001];
void query (int nod,int st,int dr){
if(a<=st&&dr<=b){
      sol=max(sol,v[nod]);
      return;
}
int mid=(st+dr)/2;
if(a<=mid)
      query(2*nod,st,mid);
if(b>mid)
      query(2*nod+1,mid+1,dr);
}
void update(int nod,int st,int dr){
if(st==dr){
      v[nod]=b;
      return;
}
int mid=(st+dr)/2;
if(a<=mid)
      update(2*nod,st,mid);
if(a>mid)
      update(2*nod+1,mid+1,dr);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
void build (int nod,int st,int dr){
      if(st==dr){
            fin>>v[nod];
            return;
      }
int mid=(st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
v[nod]= max(v[2*nod],v[2*nod+1]);
}
int main()
{
  fin>>n>>m;
  build(1,1,n);
  for(i=1;i<=m;i++){
      fin>>tip>>a>>b;
      if(tip==0){
      sol=INT_MIN;
      query(1,1,n);
      fout<<sol<<"\n";
      }
      else
            update(1,1,n);
}
}