Pagini recente » Cod sursa (job #2312918) | Cod sursa (job #409998) | Cod sursa (job #73030) | Cod sursa (job #1559175) | Cod sursa (job #1953772)
#include <iostream>
#include <stdio.h>
#define InFile "arbint.in"
#define OutFile "arbint.out"
#define MAXN 100003
using namespace std;
int N, M;
int Arb[ 0x3 * MAXN ];
int X, Pos, Val, A, B;
inline void SearchAndUpdate(int Nod, int Left, int Right)
{
if (Left == Right)
{
Arb[ Nod ] = (Val); return;
}
int Mid((Right + Left) >> 0x1);
if (Pos <= Mid)
SearchAndUpdate((Nod << 0x1), Left, Mid);
else
SearchAndUpdate((Nod << 0x1) + 0x1, Mid + 0x1, Right);
Arb[ Nod ] = ( max(Arb[ (Nod << 0x1) ], Arb[ (Nod << 0x1) + 0x1]) );
}
inline int Query(int Nod, int Left, int Right)
{
if (Left >= A && B >= Right)
{
return Arb[ Nod ];
}
int Mid((Right + Left) >> 0x1);
int Answer1(-0x1), Answer2(-0x1);
if (Mid >= A) Answer1 = Query((Nod << 0x1), Left, Mid);
if (Mid < B) Answer2 = Query((Nod << 0x1) + 0x1, Mid + 0x1, Right);
return max(Answer1, Answer2);
}
void Solve(void)
{
FILE * f = fopen(InFile, "r");
FILE * g = fopen(OutFile, "w");
fscanf(f, "%d %d", &N, &M);
for (int i( 0x1 ); i <= N; i++)
{
fscanf(f, "%d", &X);
Pos = i ; Val = X ;
SearchAndUpdate(0x1, 0x1, N);
}
for (int i( 0x1 ); i <= M; i++)
{
fscanf(f, "%d %d %d", &X, &A, &B);
if (X == 0x0)
{
fprintf(g, "%d\n", Query(0x1, 0x1, N));
}
else
{
Pos = A; Val = B;
SearchAndUpdate(0x1, 0x1, N);
}
}
fclose(f);
fclose(g);
}
int main()
{
Solve();
}