Cod sursa(job #831175)

Utilizator radu2004GOLD radu radu2004 Data 8 decembrie 2012 11:19:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <cstdio>
int maxim,v[1000001],i,s,sf,x,val,pos,n,m;
FILE *f,*g;
using namespace std;
int maxim1 (int a,int b)
{
    if (a<b) return b;
     else return a;
}
void update (int nod,int l,int r)
{ int m;
  if (l==r) {v[nod]=val;
               return;}


     else
     {   m=(l+r)/2;
         if (pos<=m) update (2*nod,l,m);
          else update (2*nod+1,m+1,r);
     }
                v[nod]=maxim1 (v[nod*2],v[2*nod+1]);

}
void query (int nod,int l,int r)
{ int m;
    if (s<=l && sf>=r) {if (maxim<v[nod] ) maxim=v[nod];
                         return;}
    else
    {
        m=(l+r)/2;
        if (s<=m) query (2*nod,l,m);
        if (m<sf) query (2*nod+1,m+1,r) ;
    }


}
int main()
{  f=fopen ("arbint.in","r");
  g=fopen ("arbint.out","w");
  fscanf (f,"%d",&n);
  fscanf (f,"%d",&m);

  for (i=1;i<=n;i++) { fscanf (f,"%d",&val);
                       pos=i;
                       update (1,1,n);
                     }
   for (i=1;i<=m;i++)
            {
                fscanf (f,"%d",&x);
                if (x==1)
                {
                    fscanf (f,"%d%d",&pos,&val);
                    update (1,1,n);
                }
                  else
                  {   maxim=-1;
                      fscanf (f,"%d%d",&s,&sf);
                      query  (1,1,n);
                      fprintf (g,"%d\n",maxim);
                  }
            }
    return 0;
}