Pagini recente » Monitorul de evaluare | Cod sursa (job #2127953) | Cod sursa (job #2687348) | Cod sursa (job #2205041) | Cod sursa (job #967717)
Cod sursa(job #967717)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,A[300005],mx=0,i,el,t,p,v,s,d;
void Update(int nod,int st,int dr)
{ int mid;
if (st==dr) A[nod]=v;
else
{ mid=(st+dr)/2;
if (p<=mid) Update(2*nod,st,mid);
else Update(2*nod+1,mid+1,dr);
A[nod]=max(A[2*nod], A[2*nod+1]);
}
}
void Query(int nod,int st,int dr)
{ int mid;
if (s<=st && dr<=d)
mx=max(mx,A[nod]);
else
{ mid=(st+dr)/2;
if (s<=mid) Query(2*nod,st,mid);
if (d>mid) Query(2*nod+1,mid+1,dr);
}
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{ f>>el;
p=i; v=el;
Update(1,1,n);
}
for(i=1;i<=m;i++)
{ f>>t;
if (t==1) { f>>p>>v; Update(1,1,n) ;}
if (t==0) {mx=0; f>>s>>d; Query(1,1,n); g<<mx<<"\n";}
}
return 0;
}