Pagini recente » Cod sursa (job #1130838) | Cod sursa (job #116956) | Cod sursa (job #1595454) | Cod sursa (job #989451) | Cod sursa (job #612406)
Cod sursa(job #612406)
#include<fstream>
using namespace std;
int n,N,m,A[300010];
int a,b,maxim;
void ConstruireArbore()
{
int i;
for(i=N-1;i>0;i--)
A[i]=max(A[2*i],A[2*i+1]);
}
void Query(int nod,int st,int dr)
{
if(a<=st && dr<=b)
{
maxim=max(maxim,A[nod]);
return;
}
int mij=(st+dr)/2;
if(a<=mij) Query(2*nod,st,mij);
if(mij+1<=b) Query(2*nod+1,mij+1,dr);
}
void Update()
{
int k=N+a-1;
A[k]=b;
k=k/2;
while(k>0)
{
A[k]=max(A[2*k],A[2*k+1]);
k=k/2;
}
}
int main()
{
int i,op;
ifstream fin("arbint.in");
fin>>n>>m;
N=1;
while(n>N)
N=N*2;
for(i=1;i<=n;i++)
fin>>A[N+i-1];
ConstruireArbore();
ofstream fout("arbint.out");
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op==0)
{
maxim=0;
Query(1,1,N);
fout<<maxim<<"\n";
}
else
Update();
}
fin.close();
fout.close();
return 0;
}