Pagini recente » Cod sursa (job #1392165) | Cod sursa (job #2896586) | Cod sursa (job #2215513) | Cod sursa (job #2830702) | Cod sursa (job #2480160)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define LIMIT 500005
int N, M, A, B, X, Key, G[LIMIT];
void Update(int Val, int Pos, int Left = 1, int Right = N, int Node = 1) {
if (Left == Right) {
G[Node] = Val;
return;
}
int Mid = (Left + Right) >> 1;
if (Pos <= Mid)
Update(Val, Pos, Left, Mid, Node << 1);
else
Update(Val, Pos, Mid + 1, Right, (Node << 1) + 1);
G[Node] = max(G[Node << 1], G[(Node << 1) + 1]);
}
int Query(int Start, int Finish, int Left = 1, int Right = N, int Node = 1) {
if (Start <= Left && Finish >= Right)
return G[Node];
int Result = 0;
int Mid = (Left + Right) >> 1;
if (Start <= Mid)
Result = max(Result, Query(Start, Finish, Left, Mid, Node << 1));
if (Finish > Mid)
Result = max(Result, Query(Start, Finish, Mid + 1, Right, (Node << 1) + 1));
return Result;
}
int main() {
fin >> N >> M;
for (int i = 1; i <= N; i++) {
fin >> X;
Update(X, i);
}
while (M--) {
fin >> Key >> A >> B;
if (Key)
Update(B, A);
else
fout << Query(A, B) << "\n";
}
}