Cod sursa(job #1788730)

Utilizator valentin50517Vozian Valentin valentin50517 Data 26 octombrie 2016 12:35:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
 
using namespace std;
#define dim 100001
 
int N, M;
int Arb[4*dim];
int l, r, Val, Pos;

void Update(int nod, int st, int dr)
{       
     if ( st == dr ){
          Arb[nod] = Val;
          return;
     }
       
     int mid = (st+dr)/2;;
     if ( Pos <= mid ) Update(2*nod,st,mid);
     else              Update(2*nod+1,mid+1,dr);
       
     Arb[nod] = max(Arb[2*nod], Arb[2*nod+1]);
}
  

int Query(int nod, int st, int dr)
{       
     if (l <= st && dr <= r) return Arb[nod];
     
     int a=0,b=0,mid=(st+dr)/2;
     
     if (l <= mid) a=Query(2*nod,st,mid);
     if (r > mid)  b=Query(2*nod+1,mid+1,dr);
       
     return max(a,b);
}
 
int main()
{	
	ifstream cin("arbint.in");
	ofstream cout("arbint.out");
	     
    cin >> N >> M;
    
    for (Pos=1; Pos <= N; Pos++){
        cin >> Val;
        Update(1,1,N);
    }   
      
    for ( int x;M--;){
        cin >> x >> l >> r;
        Pos = l, Val = r;
        if (x) Update(1,1,N);
        else cout << Query(1,1,N) << '\n';
    }
}