Cod sursa(job #1813708)

Utilizator emity03Vrabie Vladislav emity03 Data 23 noiembrie 2016 11:07:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>

using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

int Ar[999999],l,r,ind,val,N,M,x,mid;

void update(int st, int dr, int poz)
{
     if(st==dr)
     {
               Ar[poz]=val;
               return;
     }
     
    mid=(st+dr)/2;
       if( ind<=mid) update (st,mid,poz*2);
           else update( mid+1, dr, poz*2+1);
     Ar[poz]=max(Ar[2*poz],Ar[poz*2+1]);     
}

int query(int st, int dr, int poz)
{
    if( l<=st && dr<=r)
                 return Ar[poz];
    int a=0, b=0, mid= (st+dr)/2;
    if( l<=mid )a=query(st,mid,2*poz);                            
    if( r>mid )b=query(mid+1,dr,2*poz+1);
        return max(a,b);                  
}                                                                


int main()
{
cin>>N>>M;                                                       
   for (int i=1; i<=N; ++i)
   {    
   		cin>>x;
   		ind= i;
   		val= x;
        update(1,N,1);
    }

    for (int i=1; i<=M; ++i)
    {
        int z;
        cin>>z>>l>>r;
        if(z) 
        {
        	ind =l;
        	val =r;
        	update(1,N,1);
		}
		else
		{
       	 	cout<<query(1,N,1)<<'\n';
		}
       
    }
return 0;
}