Pagini recente » Cod sursa (job #468200) | Cod sursa (job #1088300) | Cod sursa (job #581413) | Cod sursa (job #1795254) | Cod sursa (job #2560478)
#include <bits/stdc++.h>
using namespace std;
int n, m, q, poz, x, startPoz, endPoz, result;
int v[400005];
void update(int nod, int left, int right)
{
if (left == right)
{
v[nod] = x;
return;
}
int mij = (left + right) / 2;
if (poz <= mij)
update(2 * nod, left, mij);
else update(2 * nod + 1, mij + 1, right);
v[nod] = (v[2 * nod] > v[2 * nod + 1]) ? v[2 * nod] : v[2 * nod + 1];
}
void query(int nod, int left, int right)
{
if (startPoz <= left && endPoz <= right)
{
if (result < v[nod])
result = v[nod];
return;
}
int mij = (left + right) / 2;
if (startPoz <= mij)
query(2 * nod, left, mij);
if (mij < endPoz)
query(2 * n + 1, mij + 1, right);
}
int main()
{
int elemAt, value, t;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin >> n >> m;
for (int i = 0; i < n; ++i)
{
poz = i+1;
fin >> x;
update(1, 1, n);
}
for (int i = 0; i < m; ++i)
{
fin >> t >> elemAt >> value;
if (t == 0)
{
result = -1;
startPoz = elemAt;
endPoz = value;
query(1, 1, n);
fout << result << '\n';
}
else
{
poz = elemAt;
x = value;
update(1, 1, n);
}
}
fin.close();
fout.close();
return 0;
}