Pagini recente » Cod sursa (job #1471081) | Cod sursa (job #1367329) | Cod sursa (job #1551992) | Cod sursa (job #2464622) | Cod sursa (job #732504)
Cod sursa(job #732504)
#include <fstream>
using namespace std;
ifstream F("arbint.in");
ofstream G("arbint.out");
#define Nmax 100000
#define max(a,b) ( (a>b) ? a : b )
#define min(a,b) ( (a<b) ? a : b )
int N,Q;
typedef int ArbInt[Nmax*4+66];
typedef int Aux;
ArbInt A;
Aux Begin,End,Pos,Val,Max;
void Update(int,int,int);
void Query(int,int,int);
int main()
{
F>>N>>Q;
for (int i=1;i<=N;++i)
{
F>>Val,Pos=i;
Update(1,1,N);
}
for (int i=1;i<=Q;++i)
{
int chr;
F>>chr;
switch (chr)
{
case 0:
Max=-1;
F>>Begin>>End;
Query(1,1,N);
G<<Max<<'\n';
break;
case 1:
F>>Pos>>Val;
Update(1,1,N);
break;
}
}
F.close();
G.close();
return 0;
}
void Update(int Nod,int St,int Dr)
{
if ( St==Dr )
{
A[Nod]=Val;
return;
}
int Mid= (St+Dr) /2;
if ( Pos<=Mid )
Update(2*Nod,St,Mid);
else
Update(2*Nod+1,Mid+1,Dr);
A[Nod]=max(A[2*Nod],A[2*Nod+1]);
}
void Query(int Nod,int St,int Dr)
{
if ( Begin<=St && Dr<=End )
{
Max=max(Max,A[Nod]);
return;
}
int Mid= (St+Dr) /2;
if ( Begin <=Mid )
Query(2*Nod,St,Mid);
if ( Mid< End )
Query(2*Nod+1,Mid+1,Dr);
}