Pagini recente » Cod sursa (job #1452673) | Cod sursa (job #346059) | Cod sursa (job #684288) | Cod sursa (job #279226) | Cod sursa (job #2395760)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int nmax = 1e5 + 5;
int n, q, a[5 * nmax], op, x, y, val, poz, start, finish, Max;
void update (int nod, int st, int dr)
{
int mij;
if (st == dr)
{
a[nod] = val;
return;
}
mij = (st + dr) / 2;
if (poz <= mij) update(2 * nod, st, mij);
else update(2 * nod + 1, mij+1, dr);
a[nod] = max(a[2*nod], a[2*nod+1]);
}
void query (int nod, int st, int dr)
{
int mij;
if (start <= st && dr <= finish)
{
Max = max(Max, a[nod]);
return;
}
mij = (st + dr) / 2;
if (start <= mij) query(2 * nod, st, mij);
if (mij < finish) query(2 * nod + 1, mij+1, dr);
}
int main()
{
fin >> n >> q;
for (int i=1; i<=n; i++)
{
fin >> val;
poz = i;
update(1, 1, n);
}
while (q--)
{
fin >> op >> x >> y;
if (op == 1)
{
poz = x;
val = y;
update(1, 1, n);
}
else
{
Max = -1;
start = x;
finish = y;
query(1, 1, n);
fout << Max << '\n';
}
}
return 0;
}