Pagini recente » Cod sursa (job #1579174) | Cod sursa (job #3042172) | Cod sursa (job #142216) | Cod sursa (job #1594724) | Cod sursa (job #1253848)
#include <fstream>
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
int n, m, poz, val;
int nr, A, B;
int a[2 << 17];
void UPDATE(int nod, int st, int dr);
int QUERY(int nod, int st, int dr);
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
{
is >> val;
poz = i;
UPDATE(1, 1, n);
}
while ( m-- )
{
is >> nr;
if ( nr )
{
is >> poz >> val;
UPDATE(1, 1, n);
}
else
{
is >> A >> B;
os << QUERY(1, 1, n) << "\n";
}
}
is.close();
os.close();
return 0;
}
void UPDATE(int nod, int st, int dr)
{
if ( st == dr )
{
a[nod] = val;
return;
}
int md = ( st + dr ) / 2;
if ( poz <= md )
UPDATE(2 * nod, st, md);
else
UPDATE(2 * nod + 1, md + 1, dr);
a[nod] = max(a[2 * nod], a[2 * nod + 1]);
}
int QUERY(int nod, int st, int dr)
{
if ( A <= st && B >= dr )
return a[nod];
int md = ( st + dr ) / 2;
int m1 = 0, m2 = 0;
if ( A <= md )
m1 = QUERY(2 * nod, st, md);
if ( B > md )
m2 = QUERY(2 * nod + 1, md + 1, dr);
return max(m1, m2);
}