Pagini recente » Cod sursa (job #593542) | Cod sursa (job #2126634) | Cod sursa (job #1978325) | Cod sursa (job #1873365) | Cod sursa (job #2521262)
#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,op,a,b,Tree[4*Dim+2],maxim,V[Dim];;
void Init(int nod,int st,int dr) // initializeaza maximul pe intervalus [st,dr]
{
if(st==dr) Tree[nod]=V[st];
else
{
int mij=(st+dr)>>1;
Init( (nod<<1) ,st,mij);
Init( (nod<<1) + 1 ,mij+1,dr );
Tree[nod]=max(Tree[(nod<<1)],Tree[(nod<<1)+1]);
}
}
void Update(int nod,int st,int dr)
{
if( st==dr && st==a ) Tree[nod]=b;
else
{
int mij=(st+dr)>>1;
if( a<=mij )
Update( nod<<1 , st,mij );
else
Update( (nod<<1) + 1 ,mij+1,dr );
Tree[nod]=max(Tree[ nod<<1 ],Tree[ (nod<<1) + 1 ]);
}
}
void Query(int nod,int st,int dr) // returneza maximiul din intervalul [st,dr] inclus in [a,b]
{
if( st>=a && dr<=b ) maxim=max(maxim,Tree[nod]);
else
{
int mij=(st+dr)>>1;
if( a<=mij ) Query( nod<<1 ,st,mij);
if( b > mij ) Query( (nod<<1)+1,mij+1,dr );
}
}
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++) f>>V[i];
Init(1,1,N);
// for(int i=1;i<=4*N+1;i++) cout<<Tree[i]<<" "<<i<<'\n';
for(int i=1;i<=M;i++)
{
f>>op>>a>>b;
if(!op)
{
maxim=0;
Query(1,1,N);
g<<maxim<<'\n';
}
else
Update(1,1,N);
}
return 0;
}