Cod sursa(job #1414267)

Utilizator azkabancont-vechi azkaban Data 2 aprilie 2015 14:29:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
int n,i,j,k,m,azk,op,a,b;
int Stree[4*100000];

class Segment_Tree
     { 
      public : 
          int Stree[4*100013];
          
	      void update (int nod,int st,int dr,int a,int b,int value)
            {
             if (st>dr || a>dr || st>b) return ;
             if (st>=a && dr<=b) 
	              {
	               Stree[nod]=value;
		           return ;	
		          }
             int mij=(st+dr)/2;
             update(nod*2,st,mij,a,b,value);
             update(nod*2+1,mij+1,dr,a,b,value);
             Stree[nod]=max(Stree[nod*2],Stree[nod*2+1]);
	        }
	        
          int query (int nod,int st,int dr,int a,int b)
              {
              if (st>dr || a>dr || st>b) return 0 ;
              if (st>=a && dr<=b) return Stree[nod];
              int mij=(st+dr)/2;
              return max(query(nod*2,st,mij,a,b),query(nod*2+1,mij+1,dr,a,b));
	          }
      };
Segment_Tree Arbore;
int main(void)
{
 ifstream cin("arbint.in");
 ofstream cout("arbint.out");
 cin>>n>>m;
 for (i=1;i<=n;++i)
  {
   cin>>azk;
   Arbore.update(1,1,n,i,i,azk);
  }
 while(m--)
    {
     cin>>op>>a>>b;
     if (op) Arbore.update(1,1,n,a,a,b); 
        else cout<<Arbore.query(1,1,n,a,b)<<"\n";
	}
 return 0;
}