Pagini recente » Cod sursa (job #2851486) | Cod sursa (job #351313) | Cod sursa (job #3176713) | Cod sursa (job #722607) | Cod sursa (job #2395737)
#include <fstream>
using namespace std;
const int NMAX=500005;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int Arb[NMAX];
int X,A,B,Nod,N,M,Pos,Val,MAX,start,finish;
void Actualizare(int Nod, int st, int dr)
{
if (st==dr)
{
Arb[Nod]=Val;
return;
}
int mij=(st+dr)/2;
if (Pos<=mij)
Actualizare(2*Nod,st,mij);
else Actualizare(2*Nod+1,mij+1,dr);
Arb[Nod]=max(Arb[2*Nod],Arb[2*Nod+1]);
}
void Interogare(int Nod, int st, int dr)
{
if (start<=st&&dr<=finish)
{
if (Arb[Nod]>MAX)
MAX=Arb[Nod];
return;
}
int mij= (st+dr)/2;
if (start<=mij)
Interogare(2*Nod,st,mij);
if (mij<finish)
Interogare(2*Nod+1,mij+1,dr);
}
int main()
{
fin>>N>>M;;
for (int i=1; i<=N; i++)
{
fin>>X;
Pos=i;
Val=X;
Actualizare(1,1,N);
}
for (int i=1; i<=M; i++)
{
fin>>X>>A>>B;
if (X==0)
{
MAX=-1;
start=A;
finish=B;
Interogare(1,1,N);
fout<<MAX<<"\n";
}
else
{
Pos=A;
Val=B;
Actualizare(1,1,N);
}
}
}