Cod sursa(job #1302988)

Utilizator robertstrecheStreche Robert robertstreche Data 27 decembrie 2014 15:16:18
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

#define lmax 100005

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int a,b,n,nn,i,tip,poz,val;

int v[2*lmax];

inline int query(int nod,int st,int dr)
{
   if (st>b || dr<a)
    return 0;

   if (st>=a && dr<=b)
    return v[nod];

   else
    {
        int m=(st+dr)/2;
        return max(query(2*nod,st,m),query(2*nod+1,m+1,dr));
    }
}
inline void update(int nod,int st,int dr)
{
   int m=(st+dr)/2;

   if (st==dr)
    {
        v[nod]=val;
        return;
    }
   else
     if (poz<=m)
        update(2*nod,st,m);
     else
        update(2*nod+1,m+1,dr);

     v[nod]=max(v[2*nod],v[2*nod+1]);

}
int main()
{
    f>>n>>nn;

    for (i=1;i<=n;i++)
      {
          f>>val;
          poz=i;

          update(1,1,n);
      }


    for (i=1;i<=nn;i++)
      {
         f>>tip>>a>>b;

         if (tip==1)
          {
              poz=a;
              val=b;
              update(1,1,n);
          }
         else
           g<<query(1,1,n)<<'\n';
      }

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