Cod sursa(job #1788723)

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

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 (st <= l && dr >= r) return Arb[nod];
     
     int a=0,b=0,mid=(st+dr)/2;
     
     if (st <= mid) a=Query(2*nod,st,mid);
     if (dr > 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) cout << Query(1,1,N) << '\n';
        else Update(1,1,N);
    }
}