Pagini recente » Profil AdyIasi96 | Cod sursa (job #483896) | Cod sursa (job #941695) | Cod sursa (job #2702380) | Cod sursa (job #472649)
Cod sursa(job #472649)
#include <iostream>
#include <fstream>
#define nmax 100005
#define ll long long
using namespace std;
const char iname[] = "arbint.in";
const char oname[] = "arbint.out";
ifstream fin(iname);
ofstream fout(oname);
ll N, M, i, j, k, l, maxim, start, finish, pos, val, op, a, b;
ll Arb[nmax];
void query(ll nod, ll left, ll right)
{
if(start <= left && right <= finish)
{
if(maxim < Arb[nod])
{
maxim = Arb[nod];
return;
}
}
else
{
ll mj = (left + right) / 2;
if(start <= mj)
query(2 * nod, left, mj);
if(mj < finish)
query(2 * nod + 1, mj + 1, right);
}
}
void update(ll nod, ll left, ll right)
{
if(left == right)
{
Arb[nod] = val;
return;
}
else
{
ll mj = (left + right) / 2;
if(pos <= mj)
update(2 * nod, left, mj);
else
update(2 * nod + 1, mj + 1, right);
Arb[nod] = max(Arb[2*nod], Arb[2*nod + 1]);
}
}
int main()
{
fin >> N >> M;
for(i = 1; i <= N; i ++)
{
fin >> val;
pos = i;
update(1, 1, N);
}
for(i = 1; i <= M; i ++)
{
fin >> op >> a >> b;
if(op == 0)
{
maxim = -1;
start = a;
finish = b;
query(1, 1, N);
fout << maxim << "\n";
}
else
{
pos = a;
val = b;
update(1, 1, N);
}
}
return 0;
}