Cod sursa(job #1129116)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 27 februarie 2014 20:17:40
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 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)
{
     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);
     else if(mij<B)Update(s2,mij+1,dr);
     if(Arb[s1]>Arb[s2])Arb[node]=Arb[s1];
               else Arb[node]=Arb[s2];
}

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

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