Pagini recente » Cod sursa (job #1893311) | Cod sursa (job #613219) | Cod sursa (job #1723422) | Cod sursa (job #467333) | Cod sursa (job #1380230)
#include <fstream>
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
int pos, val, n, m, x, l, r, maxn;
int Arb[4 * 100001 + 10];
void Update(int node, int left, int right);
void Query(int node, int left, int right);
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
{
is >> val;
pos = i;
Update(1, 1, n);
}
for ( int i = 1; i <= m; ++i )
{
is >> x;
switch(x)
{
case 0:
is >> l >> r;
maxn = -1;
Query(1, 1, n);
os << maxn << '\n';
break;
case 1:
is >> pos >> val;
Update(1, 1, n);
break;
}
}
is.close();
os.close();
return 0;
}
void Update(int node, int left, int right)
{
if ( left == right )
{
Arb[node] = val;
return;
}
int m = left + ( right - left ) / 2;
if ( pos <= m )
Update(2 * node, left, m);
else
Update(2 * node + 1, m + 1, right);
Arb[node] = max(Arb[2 * node], Arb[2 * node + 1]);
}
void Query(int node, int left, int right)
{
if ( l <= left && right <= r )
{
maxn = max(maxn, Arb[node]);
return;
}
int m = left + ( right - left ) / 2;
if ( l <= m )
Query(2 * node, left, m);
if ( r > m )
Query(2 * node + 1, m + 1, right);
}