Pagini recente » Cod sursa (job #28553) | Cod sursa (job #1131765) | Cod sursa (job #2509049) | Cod sursa (job #656174) | Cod sursa (job #3216026)
#include <iostream>
#include <fstream>
#define NMAX 100002
#define inf 0x3f3f3f3f
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, tree[4*NMAX], sol;
void update(int poz, int val, int nod = 1, int st = 1, int dr = n)
{
if (st == dr)
{
tree[nod] = val;
return;
}
int mijl = (st + dr) / 2;
if (poz <= mijl) update(poz, val, 2 * nod, st, mijl);
else update(poz, val, 2 * nod + 1, mijl + 1, dr);
tree[nod] = max(tree[2 * nod], tree[2 * nod + 1]);
}
int query(int a, int b, int nod = 1, int st = 1, int dr = n)
{
if (a <= st && dr <= b)
{
return tree[nod];
}
int mijl = (st + dr) / 2;
if (a <= mijl) return query(a, b, 2 * nod, st, mijl);
if (b > mijl) return query(a, b, 2 * nod + 1, mijl + 1, dr);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
update(i, x);
}
for (int i = 1; i <= m; i++)
{
int c, a, b;
fin >> c >> a >> b;
if (c == 0)
fout << query(a, b) << "\n";
if (c == 1)
update(a, b);
}
return 0;
}