Cod sursa(job #2508804)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 13 decembrie 2019 08:45:25
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define NM 100009
#define INFINIT 1000000009
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,n,m,t,a,b;
int v[NM*4],x[NM];
int filaib( int p,int st,int dr ){
  int m,lch,rch;
  if(st==dr) {
    v[p]=x[st];
    return v[p];
  }
  m=(st+dr)/2; lch=2*p; rch=2*p+1;
  v[p]=max(filaib(lch,st,m),filaib(rch,m+1,dr));
  return v[p];
}
int cautaib( int l,int r,int p,int st,int dr ){
  int m,lch,rch;
  if(dr<l||r<st) return INFINIT;
  if(l<=st&&dr<=r) return v[p];
  m=(st+dr)/2; lch=2*p; rch=2*p+1;
  return max(cautaib(l,r,lch,st,m),cautaib(l,t,rch,m+1,dr));
}
int actualaib( int val,int pval,int p,int st, int dr ){
   int m,lch,rch;
  if(st==dr){
    v[p]=val;
    return val;
  }
  m=(st+dr)/2; lch=2*p; rch=2*p+1;
  if(st<=pval&&pval<=m) actualaib(val,pval,lch,st,m);
     else               actualaib(val,pval,rch,m+1,dr);
  v[p]=min(v[lch],v[rch]);
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++) f>>x[i];
    filaib(1,1,n);
    for(i=1;i<=m;i++){
        f>>t>>a>>b;
        if(t==0) g<<cautaib(a,b,1,1,n)<<'\n';
          else   actualaib(b,a,1,1,n);
    }
    return 0;
}