Pagini recente » Cod sursa (job #2934081) | Cod sursa (job #808142) | Cod sursa (job #2317915) | Cod sursa (job #1803319) | Cod sursa (job #1596855)
#include <fstream>
#include <vector>
#define INF 0x3f3f3f3f
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
using VI = vector<int>;
using VVI = vector<VI>;
int n, m;
int poz, val, lt, rt;
VI a;
void Read();
void Update(int st, int dr, int nod);
int Max(int st, int dr, int nod);
int main()
{
Read();
int tip;
while ( m-- )
{
is >> tip >> lt >> rt;
if ( !tip )
os << Max(1, n, 1) << "\n";
else
{
poz = lt;
val = rt;
Update(1, n, 1);
}
}
is.close();
os.close();
return 0;
}
int Max(int st, int dr, int nod)
{
if ( lt <= st && dr <= rt )
return a[nod];
int md = ( st + dr ) / 2, rez = 0;
if ( lt <= md )
rez = Max(st, md, 2 * nod);
if ( md < rt )
rez = max(rez, Max(md + 1, dr, 2 * nod + 1));
return rez;
}
void Update(int st, int dr, int nod)
{
if ( st == dr )
{
a[nod] = val;
return;
}
int md = ( st + dr ) / 2;
if ( poz <= md )
Update(st, md, 2 * nod);
else
Update(md + 1, dr, 2 * nod + 1);
a[nod] = max(a[2 * nod], a[2 * nod + 1]);
}
void Read()
{
is >> n >> m;
a = VI(4 * n + 1);
for ( poz = 1; poz <= n; ++poz )
{
is >> val;
Update(1, n, 1);
}
}