Pagini recente » Cod sursa (job #2056751) | Cod sursa (job #2841356) | Cod sursa (job #186476) | Cod sursa (job #957024) | Cod sursa (job #1307232)
#include<fstream>
#include<algorithm>
#define LL long long
#define MAXN 100005
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
LL N,M,op,start,finish;
int A[4*MAXN+100];
int Poz,Val,Max;
void Update(int nod,int st,int dr){
if(st==dr){
A[nod]=Val;
return;
}
int mid=(st+dr)/2;
if(Poz<=mid)
Update(nod*2,st,mid);
else
Update(nod*2+1,mid+1,dr);
A[nod]=max(A[nod*2],A[nod*2+1]);
}
void Query(int nod,int st,int dr){
if(start<=st && dr<=finish){
Max=max(Max,A[nod]);
return;
}
int div=(st+dr)/2;
if(start<=div) Query(2*nod,st,div);
if(div<finish) Query(2*nod+1,div+1,dr);
}
int main(){
int i,j,a,b,op;
cin>>N>>M;
for(i=1;i<=N;i++){
cin>>Val;
Poz=i;
Update(1,1,N);
}
while(M--){
cin>>op>>a>>b;
if(op==0){
Max=-1;
start=a,finish=b;
Query(1,1,N);
cout<<Max<<"\n";
}
else{
Poz=a;
Val=b;
Update(1,1,N);
}
}
return 0;
}