Pagini recente » Cod sursa (job #2041287) | Cod sursa (job #2603484) | Cod sursa (job #2531833) | Cod sursa (job #1620987) | Cod sursa (job #2403069)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int MaxArb[100001*4+66];
int N, M;
int Pos, Val, maxim, start, finish;
bool k;
void Update(int nod, int left, int right){
if(left == right) MaxArb[nod] = Val;
else{
int div = (left+right)/2;
if(Pos <= div) Update(2*nod, left, div);
else Update(2*nod+1, div+1, right);
MaxArb[nod] = max(MaxArb[2*nod], MaxArb[2*nod+1]);
}
}
void Query(int nod, int left, int right){
if(start <= left && right <= finish){
if(maxim < MaxArb[nod]) maxim = MaxArb[nod];
}
else{
int div = (left+right)/2;
if(start <= div) Query(2*nod, left, div);
if(div < finish) Query(2*nod+1, div+1, right);
}
}
void Solve(){
fin>>N>>M;
for(int i = 1; i <= N; i++){
Pos = i;
fin>>Val;
Update(1, 1, N);
}
for(int i = 0; i < M; i++){
fin>>k;
if(!k){
fin>>start>>finish;
maxim = -1;
Query(1, 1, N);
cout<<maxim<<'\n';
}
else{
fin>>Pos>>Val;
Update(1, 1, N);
}
}
}
int main()
{
Solve();
return 0;
}