Pagini recente » Cod sursa (job #878285) | Cod sursa (job #2736202) | Cod sursa (job #1084566) | Cod sursa (job #1133687) | Cod sursa (job #2080183)
#include <iostream>
//arbint
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int arbore[5*100001] , n , op ;
int start, finish , poz , value;
int maxim ;
void update( int nod , int left , int right )
{
if( left == right ) {arbore[nod] = value ;
return ;
}
int div= (left+right) / 2 ;
if (poz <= div ) update( nod * 2, left, div );
else update( nod *2+1, div+1, right);
arbore[nod]= max(arbore[nod*2],arbore[nod*2+1]);
}
void query( int nod, int left, int right )
{
//daca pot prelua informatia
if(start<=left && right<=finish)
{
maxim= max(maxim,arbore[nod]);
return ;
}
int div = (left + right)/ 2 ;
if( start <=div ) query(nod * 2 , left, div);
if( div < finish ) query( nod * 2 + 1, div+1, right);
}
int main()
{ in >> n >> op ;
for ( int i =1 ; i <= n ; ++ i )
{ poz = i ;
in >> value ;
update(1,1,n);
}
for(int i =1 ; i <= op ; ++ i )
{
int tip ;
in >> tip ;
if( tip == 0 )
{
maxim = -1 ;
in >> start >> finish;
query(1,1,n);
out << maxim << "\n";
}
else
{
int aa , bb ;
in >> aa >> bb ;
poz=aa;
value=bb;
update(1,1,n);
}
}
return 0;
}