Pagini recente » Cod sursa (job #1658025) | Cod sursa (job #2507987) | Cod sursa (job #2953924) | Cod sursa (job #2857106) | Cod sursa (job #1128327)
#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, start, finish;
void query( int left, int right, int nod){
if ( start <= left && right <= finish )
{
if ( maxim < MaxArb[nod] ) maxim = MaxArb[nod];
return;
}
int mijloc = (left+right)/2;
if( start <= mijloc){
query(left , mijloc, nod*2);
}
if( mijloc < end){
query(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;
start = a;
end = b;
query(1, n, 1);
out<<maxim<<"\n";
}
}
return 0;
}