Pagini recente » Cod sursa (job #2514329) | Cod sursa (job #1494079) | Cod sursa (job #1440650) | Cod sursa (job #547612) | Cod sursa (job #3178834)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cmath>
#define NMAX 100005
#define NLOGMAX 18
using namespace std;
const string nume_fisier = "arbint";
ifstream fin(nume_fisier + ".in");
ofstream fout(nume_fisier + ".out");
int arb[200005], pos, val, start, finish, maxi;
int n, m;
int max(int a, int b)
{
return (a > b ? a : b);
}
void update(int nod, int left, int right)
{
if (left == right)
{
arb[nod] = val;
return;
}
int m = left + right;
m /= 2;
if (pos <= m)
update(2 * nod, left, m);
else
update(2 * nod + 1, m + 1, right);
arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}
void querry(int nod, int left, int right)
{
if (start <= left && right <= finish)
{
if (maxi < arb[nod])
maxi = arb[nod];
return;
}
int m = left + right;
m /= 2;
if (start <= m)
querry(2 * nod, left, m);
if (finish > m)
querry(2 * nod + 1, m + 1, right);
}
int main()
{
fin >> n >> m;
for (pos = 1; pos <= n; pos++)
{
fin >> val;
update(1, 1, n);
}
for (int i = 0; i < m; ++i)
{
int c, a, b;
fin >> c >> a >> b;
if (c)
{
pos = a;
val = b;
update(1, 1, n);
}
else
{
start = a;
finish = b;
maxi = -1;
querry(1, 1, n);
fout << maxi << '\n';
}
}
}