Pagini recente » Cod sursa (job #1021076) | Cod sursa (job #1919845) | Cod sursa (job #2892170) | Cod sursa (job #2904598)
#include <fstream>
#include <cstdlib>
#define MAX 400011
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[MAX];
int poz, val, st, dr;
int maxim(int x, int y)
{
if (x > y)
return x;
return y;
}
void update(int k, int left, int right)
{
if (left == right)
{
v[k] = val;
return;
}
int mij = (left + right) / 2;
if (poz <= mij)
update(2 * k, left, mij);
else
update(2 * k + 1, mij + 1, right);
v[k] = maxim(v[2 * k], v[2 * k + 1]);
}
int query(int k, int left, int right)
{
if (left >= st && right <= dr)
return v[k];
int mij = (left + right) / 2, m = -1;
if (st <= mij)
m = query(2 * k, left, mij);
if (dr > mij)
m = maxim(m, query(2 * k + 1, mij + 1, right));
return m;
}
int main()
{
int n, m, i, p;
fin >> n >> m;
for (i = 1; i <= n; ++i)
{
fin >> val;
poz = i;
update(1, 1, n);
}
while (m)
{
fin >> p;
if (1 == p)
{
fin >> poz >> val;
update(1, 1, n);
}
else
{
fin >> st >> dr;
fout << query(1, 1, n) << '\n';
}
--m;
}
return 0;
}