Pagini recente » Cod sursa (job #2985812) | Cod sursa (job #1139827) | Cod sursa (job #2449249) | Cod sursa (job #2488912) | Cod sursa (job #2953367)
#include<bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
struct nod
{
int info;
nod *ST,*DR;
nod(){info=0;ST=DR=NULL;}
nod(int info_){info=info_;ST=DR=NULL;}
};
nod *root;
int n,m,a,b,query(nod*,int,int);
nod *construieste(int,int);
void upd(nod*,int,int);
int main ()
{
f>>n>>m;
root=construieste(1,n);
for(;m;m--)
{
int tip;
f>>tip>>a>>b;
if(tip==0)
g<<query(root,1,n)<<'\n';
else
upd(root,1,n);
}
return 0;
}
nod *construieste(int L,int R)
{
nod *X;
X=new nod;
if(L==R)
{
int inf;
f>>inf;
X->info=inf;
return X;
}
int M=(L+R)/2;
X->ST=construieste(L,M);
X->DR=construieste(M+1,R);
X->info=max(X->ST->info,X->DR->info);
return X;
}
int query(nod *X,int A,int B)
{
if(A>b||a>B)
return 0;
if(a<=A&&B<=b)
return X->info;
int M=(A+B)/2;
return max(query(X->ST,A,M),query(X->DR,M+1,B));
}
void upd(nod *X,int A,int B)
{
if(A==B)
{
X->info=b;
return;
}
int M=(A+B)/2;
if(a<=M)upd(X->ST,A,M);
else upd(X->DR,M+1,B);
X->info=max(X->ST->info,X->DR->info);
}