Pagini recente » Clasament teme2_acmunibuc_2013 | Cod sursa (job #1309165) | Cod sursa (job #1946443) | Monitorul de evaluare | Cod sursa (job #1128312)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 400105;
int MaxArb[N];
int n , m;
int pozitie, valoare;
void update(int left, int right, int nod){
if( left == right ){
MaxArb[nod] = valoare;
return;
}
int mijloc = (left+right)/2;
if( pozitie <= mijloc){
update(left, mijloc, nod*2);
} else {
update(mijloc+1 , right, nod*2+1);
}
MaxArb[nod] = max(MaxArb[nod*2], MaxArb[nod*2+1]);
}
int maxim;
void query(int start, int end, int left, int right, int nod){
if ( start <= left && right <= end )
{
if ( maxim < MaxArb[nod] ) maxim = MaxArb[nod];
return;
}
int mijloc = (left+right)/2;
if( start <= mijloc){
query(start, end, left , mijloc, nod*2);
}
if( mijloc < end){
query(start, end, mijloc+1 , right, nod*2+1);;
}
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++){
int x;
in>>x;
pozitie = i;
valoare = x;
update(1,n,1);
}
for(int i=1;i<=m;i++){
int tip, a, b ;
in>>tip>>a>>b;
if(tip == 1){
pozitie = a;
valoare = b;
update(1,n,1);
} else {
maxim = -1;
query(a,b, 1, n, 1);
out<<maxim<<"\n";
}
}
return 0;
}