Pagini recente » Cod sursa (job #2121288) | Cod sursa (job #258526) | Cod sursa (job #2368773) | Cod sursa (job #816469) | Cod sursa (job #2292886)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a,b,sol,n,m,i,tip;
int v[400001];
void query (int nod,int st,int dr){
if(a<=st&&dr<=b){
sol=max(sol,v[nod]);
return;
}
int mid=(st+dr)/2;
if(a<=mid)
query(2*nod,st,mid);
if(b>mid)
query(2*nod+1,mid+1,dr);
}
void update(int nod,int st,int dr){
if(st==dr){
v[nod]=b;
return;
}
int mid=(st+dr)/2;
if(a<=mid)
update(2*nod,st,mid);
if(a>mid)
update(2*nod+1,mid+1,dr);
v[nod]=max(v[2*nod],v[2*nod+1]);
}
void build (int nod,int st,int dr){
if(st==dr){
fin>>v[nod];
return;
}
int mid=(st+dr)/2;
build(2*nod,st,mid);
build(2*nod+1,mid+1,dr);
v[nod]= max(v[2*nod],v[2*nod+1]);
}
int main()
{
fin>>n>>m;
build(1,1,n);
for(i=1;i<=m;i++){
fin>>tip>>a>>b;
if(tip==0){
sol=INT_MIN;
query(1,1,n);
fout<<sol<<"\n";
}
else
update(1,1,n);
}
}