Pagini recente » Cod sursa (job #1100732) | Cod sursa (job #2767341) | Cod sursa (job #789820) | Cod sursa (job #2499213) | Cod sursa (job #2478585)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
struct nod
{
int info;
nod *fs,*fd,*ta;
};
const int N = 100010;
int n,m,L,R,cod,getMax(nod*,int,int);
nod *builtAint(nod*,int,int);
nod *root, *F[N];
int main()
{
f>>n>>m;
root=builtAint(NULL,1,n);
for(;m;m--)
{
f>>cod>>L>>R;
if(cod)
{
F[L]->info=R;
for(nod *aux=F[L]->ta;aux;aux=aux->ta)
aux->info=max(aux->fs->info,aux->fd->info);
}
else
g<<getMax(root,1,n)<<'\n';
}
return 0;
}
nod *builtAint(nod* tata,int st,int dr)
{
nod *aux=new nod;
aux->ta=tata;
if(st==dr)
{
int x;
f>>x;
aux->info=x;
aux->fs=aux->fd=NULL;
F[st]=aux;
return aux;
}
int mi=(st+dr)/2;
aux->fs=builtAint(aux,st,mi);
aux->fd=builtAint(aux,mi+1,dr);
aux->info=max(aux->fs->info,aux->fd->info);
return aux;
}
int getMax(nod *r,int st,int dr)
{
if(L<=st&&dr<=R)
return r->info;
if(L>dr||st>R)
return 0;
int mi=(st+dr)/2;
return max(getMax(r->fs,st,mi),getMax(r->fd,mi+1,dr));
}