Pagini recente » Cod sursa (job #574869) | Cod sursa (job #3215717) | Cod sursa (job #2961374) | Cod sursa (job #1269223) | Cod sursa (job #2794776)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
/*********************************/
/// INPUT / OUTPUT
ifstream f("arbint.in");
ofstream g("arbint.out");
/*********************************/
/// GLOBAL DECLARATIONS
int N, M;
int v[NMAX];
int arb[4 * NMAX];
/*********************************/
/// FUNCTIONS
void ReadInput();
void Solution();
/*********************************/
///------------------------------------------
void Update(int left, int right, int node, int pos)
{
if (left == right)
{
arb[node] = v[pos];
return;
}
int mid = (right - left) / 2 + left;
if (pos <= mid) Update(left, mid, 2 * node, pos);
else Update(mid + 1, right, 2 * node + 1, pos);
arb[node] = max(arb[2 * node], arb[2 * node + 1]);
}
///------------------------------------------
inline void ReadInput()
{
f >> N >> M;
for (int i = 1 ; i <= N ; ++ i)
{
f >> v[i];
Update(1, N, 1, i);
}
}
///------------------------------------------
int Query(int arbLeft, int arbRight, int left, int right, int node)
{
if (arbLeft > right || arbRight < left) return -1;
if (left <= arbLeft && right >= arbRight) return arb[node];
int mid = (arbRight - arbLeft) / 2 + arbLeft;
int leftAns = Query(arbLeft, mid, left, right, 2 * node);
int rightAns = Query(mid + 1, arbRight, left, right, 2 * node + 1);
return max(leftAns, rightAns);
}
///------------------------------------------
inline void Solution()
{
for (int i = 1 ; i <= M ; ++ i)
{
int cer, a, b;
f >> cer >> a >> b;
if (cer == 0) g << Query(1, N, a, b, 1) << "\n";
else
{
v[a] = b;
Update(1, N, 1, a);
}
}
}
///------------------------------------------
int main()
{
ReadInput();
Solution();
}