Pagini recente » Cod sursa (job #3291114) | Cod sursa (job #1021279) | Cod sursa (job #1640541) | Cod sursa (job #1963436) | Cod sursa (job #1290908)
#include <fstream>
#define Nmax 4*100000
using namespace std;
ifstream is ("arbint.in");
ofstream os ("arbint.out");
int N, M, arb[Nmax], poz, val, x, maxim, l, r;
void Update(int nod, int s, int d);
void Query(int nod, int s, int d);
int main()
{
is >> N >> M;
for(int i = 1; i <= N; ++i)
{
is >> val;
poz = i;
Update(1, 1, N);
}
for(int i = 1; i <= M; ++i)
{
is >> x;
if(!x)
{
maxim = -1;
is >> l >> r;
Query(1, 1, N);
os << maxim << "\n";
}
else
{
is >> poz >> val;
Update(1, 1, N);
}
}
is.close();
os.close();
return 0;
}
void Update(int nod, int s, int d)
{
if(s == d)
{
arb[nod] = val;
return;
}
int m = (s+d)/2;
if(poz <= m) Update(2*nod, s, m);
else Update(2*nod+1, m+1, d);
arb[nod] = max( arb[2*nod], arb[2*nod+1] );
}
void Query(int nod, int s, int d)
{
if(l <= s && d <= r)
{
maxim = max(maxim, arb[nod]);
return;
}
int m = (s+d)/2;
if(l <= m) Query(2*nod, s, m);
if(m < r) Query(2*nod+1, m+1, d);
}