Cod sursa(job #719343)

Utilizator mariacMaria Constantin mariac Data 21 martie 2012 19:08:58
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int poz,val;
int Max[400100],maxi;
int maxim(int a,int b){return (a>b?a:b);}
void act(int nod,int st,int dr){if(st==dr)Max[nod]=val;
                                 else{int m;
                                      m=(st+dr)/2;
                                      if(poz<=m) act(2*nod,st,m);
                                         else act(2*nod+1,m+1,dr);
                                       Max[nod]=maxim(Max[2*nod],Max[2*nod+1]);
                                    }
                                }
void inter(int nod,int st,int dr,int a,int b)
            {if(a<=st && dr<=b){if(maxi<Max[nod])maxi=Max[nod];}
             else {int m;
                   m=(st+dr)/2;
                   if(a<=m)inter(2*nod,st,m,a,b);
                   if(b>m)inter(2*nod+1,m+1,dr,a,b);
                   }
            }
int main()
{int n,m,i,a,b,x;
 fin>>n>>m;
 for(i=1;i<=n;i++)
    {fin>>x;
     poz=i;val=x;
     act(1,1,n);
    }
  for(i=1;i<=m;i++)
     {fin>>x;fin>>a;fin>>b;
      if(x==0){maxi=-1;
              inter(1,1,n,a,b);
              fout<<maxi<<"\n";
                }
        else{poz=a;
             val=b;
             act(1,1,n);
            }
     }

    return 0;
}