Cod sursa(job #967702)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 28 iunie 2013 12:23:15
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arblong int.in");
ofstream g("arblong int.out");
long int n,m,A[300005],mx=0;
void Update(long long int nod,long long int st,long long int dr,long long int poz,long long int x)
{ long long int mid;
   if (st==dr) A[nod]=x;
   else
   { mid=(st+dr)/2;
      if (poz<=mid) Update(2*nod,st,mid,poz,x);
       else Update(2*nod+1,mid+1,dr,poz,x);
     A[nod]=max(A[2*nod], A[2*nod+1]);
   }
}
void Query(long int nod,long int st,long int dr,long int x,long int y)
{ long int mid;
  if (x<=st && dr<=y)
     mx=max(mx,A[nod]);
  else
   { mid=(st+dr)/2;
      if (x<=mid) Query(2*nod,st,mid,x,y);
      if (y>mid) Query(2*nod+1,mid+1,dr,x,y);
   }
}
int main()
{ long int i,el,t,p,v,s,d;
    f>>n>>m;
   for(i=1;i<=n;i++)
   { f>>el;
       Update(1,1,n,i,el);
   }
  // cout<<el<<" "<<m;
   for(i=1;i<=m;i++)
    { f>>t;
       if (t==1) { f>>p>>v; Update(1,1,n,p,v) ;}
       if (t==0) {mx=0; f>>s>>d; Query(1,1,n,s,d); g<<mx<<"\n";}
    }
    return 0;
}