Pagini recente » Cod sursa (job #2986853) | Cod sursa (job #1788129) | Cod sursa (job #1211589) | Cod sursa (job #394806) | Cod sursa (job #1520074)
#include <fstream>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
struct nod
{
int inf;
nod *FS,*FD,*TA;
nod(){inf=0;FS=FD=TA=NULL;}
nod(int Inf){inf=Inf;FS=FD=TA=NULL;}
};
nod *root,*P[100010],*construieste(nod*,int,int);
int p, q, cod, a, b, n, i, t = 1, x, aint[265000], query(nod*, int, int);
int main()
{
f>>n>>q;
for(i=1;i<=n;i++)
{
f>>x;
P[i]=new nod(x);
}
root=construieste(NULL,1,n);
for(;q;q--)
{
f>>cod>>a>>b;
if(cod==1)
{
P[a]->inf=b;
for(nod *aux=P[a]->TA;aux;aux=aux->TA)
aux->inf=max(aux->FS->inf,aux->FD->inf);
continue;
}
g<<query(root,1,n)<<'\n';
}
}
nod *construieste(nod *dad,int L,int R)
{
if(L<R)
{
nod *aux;
aux=new nod;
aux->TA=dad;
aux->FS=construieste(aux,L,(L+R)/2);
aux->FD=construieste(aux,(L+R)/2+1,R);
aux->inf=max(aux->FS->inf,aux->FD->inf);
return aux;
}
P[L]->TA=dad;
return P[L];
}
int query(nod *N, int L, int R)
{
if(b<L||R<a)
return 0;
if(a<=L&&R<=b)
return N->inf;
return max(query(N->FS,L,(L+R)/2),query(N->FD,(L+R)/2+1,R));
}