Pagini recente » Istoria paginii runda/oni_clasa_9 | Rating Alexandra Buruiana (alexandra.buruiana) | Cod sursa (job #2535943) | Cod sursa (job #282620) | Cod sursa (job #1443053)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
struct nod
{
int M;
nod *st,*dr,*ta;
};
nod *root;
int n,m,a,b,x[100010],c,Max(int,int,nod*),i;
nod *build(int,int,nod *),*p[100010];
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
f>>x[i];
root=build(1,n,NULL);
for(;m;m--)
{
f>>c>>a>>b;
if(c==0)
g<<Max(1,n,root)<<'\n';
else
{
p[a]->M=b;
for(nod *aux=p[a]->ta;aux;aux=aux->ta)
aux->M=max(aux->st->M,aux->dr->M);
}
}
return 0;
}
nod *build(int l,int r,nod *t)
{
nod *aux;
aux=new nod;
aux->ta=t;
if(l==r)
{
aux->M=x[l];
aux->st=NULL;
aux->dr=NULL;
p[l]=aux;
}
else
{
aux->st=build(l,(l+r)/2,aux);
aux->dr=build((l+r)/2+1,r,aux);
aux->M=max(aux->st->M,aux->dr->M);
}
return aux;
}
int Max(int l,int r,nod *N)
{
if(a<=l&& r<=b)return N->M;
if(r<a || l>b) return 0;
return max(Max(l,(l+r)/2,N->st),Max((l+r)/2+1,r,N->dr));
}