Cod sursa(job #1129101)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 27 februarie 2014 20:12:37
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#define Nmax 100009
#include <algorithm>
#define oo 2000000000
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

int N,M,poz,A,B,val,Arb[4*Nmax],sol;

void Update(int node,int st,int dr,int A,int B)
{
     if(A<=st && dr<=B)
     {
          Arb[node]=val;
          return;
     }
     int mij=(st+dr)>>1, s1=node<<1, s2=(node<<1)+1;
     if(A<=mij)Update(s1,st,mij,A,B);
     else if(mij<B)Update(s2,mij+1,dr,A,B);
     Arb[node]=max(Arb[s1],Arb[s2]);
}

void Query(int node,int st,int dr,int A,int B)
{
     if(A<=st && dr<=B)
     {
          sol=max(sol,Arb[node]);
          return;
     }
     int mij=(st+dr)>>1, s1=node<<1, s2=(node<<1)+1;
     if(A<=mij)Query(s1,st,mij,A,B);
     if(mij<B) Query(s2,mij+1,dr,A,B);
}
int main()
{
     f>>N>>M;
     for(int i=1;i<=N;++i)
          f>>val , Update(1,1,N,i,i);
     for(int i=1;i<=M;++i)
     {
          int op , x,y;
          f>>op>>x>>y;
          if(op==1) val=y ,Update(1,1,N,x,x);
          else sol=-oo,Query(1,1,N,x,y),g<<sol<<'\n';
     }

     f.close();g.close();
     return 0;
}