Cod sursa(job #629763)

Utilizator VladberilaVladutz Vladberila Data 3 noiembrie 2011 22:20:23
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#define Nmax 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M,nod,arb[4*Nmax],p,x,A,B,maxim1,X;
inline int maxim(int x,int y)
{
     if(x<y)
         return y;
     return x;   
}
void update(int nod, int st, int dr)
{
     if(st==dr)
     {
         arb[nod]=x;
         return;
     }
     int mij=(st+dr)/2;
     if(p<=mij)
         update(2*nod,st,mij);
     else
         update(2*nod+1,mij+1,dr);
     arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int st,int dr)
{
     if(A<=st && dr<=B)
     {
          if(maxim1<arb[nod])
              maxim1=arb[nod];
           return;    
     }
     int mij=(st+dr)/2;
     if(A<=mij)
          query(2*nod,st,mij);
     if(mij<B)
          query(2*nod+1,mij+1,dr);
}
void citire()
{
     f>>N>>M;
     int i;
     for(i=1;i<=N;i++)
     {
          f>>x;
          p=i;
          update(1,1,N);
     }
     for(i=1;i<=M;i++)
     {
         f>>X>>A>>B;
         if(X==1)
         {
              p=A;
              x=B;
              update(1,1,N);   
         }
         else
         {
             maxim1=-1; 
             query(1,1,N);
             g<<maxim1<<'\n';   
         }             
     }
     f.close();
     g.close();
}
int main()
{
    citire();
    return 0;
}