Pagini recente » Cod sursa (job #2900328) | Cod sursa (job #2238116) | Cod sursa (job #2775636) | Cod sursa (job #1944168) | Cod sursa (job #2560466)
#include <bits/stdc++.h>
#define MAX_SIZE 100001
using namespace std;
int n, m, q, poz, x, startPoz, endPoz, result;
int v[4 * MAX_SIZE];
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;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin >> n >> m;
for (int i = 0; i < n; ++i)
{
poz = i;
fin >> x;
update(1, 1, n);
}
for (int i = 0; i < m; ++i)
{
fin >> x >> elemAt >> value;
if (x == 0)
{
result = INT_MIN;
startPoz = elemAt;
endPoz = value;
query(1, startPoz, endPoz);
fout << result << endl;
}
else
{
startPoz = elemAt;
x = value;
update(1, 1, n);
}
}
fin.close();
fout.close();
return 0;
}