Pagini recente » Cod sursa (job #2299637) | Cod sursa (job #1334750) | Cod sursa (job #2802932) | Cod sursa (job #874658) | Cod sursa (job #2621821)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arbore[100001];
int val, poz, start, final, maxim, n, m;
void actualizare(int nod, int st, int dr)
{
if (st == dr)
{
arbore[nod] = val;
return;
}
int mij = (st + dr) / 2;
if(poz <= mij)
actualizare(2 * nod, st, mij);
else
actualizare(2 * nod + 1, mij + 1, dr);
arbore[nod] = max(arbore[2 * nod], arbore[2 * nod + 1]);
}
void interogare(int nod, int st, int dr)
{
if (start <= st && dr <= final)
{
if (maxim < arbore[nod])
maxim = arbore[nod];
return;
}
int mij = (st + dr)/2;
if (start <= mij) interogare(2 * nod, st, mij);
if (mij < final) interogare(2 * nod + 1, mij + 1, dr);
}
int main() {
f >> n >> m;
for(int i = 1; i <= n; i++)
{
int x;
f >> x;
poz = i; val = x;
actualizare(1, 1, n);
}
for(int i = 1; i <= m; i++)
{
int op, a,b;
f >> op >> a >> b;
if (op == 0)
{
maxim = -1;
start = a; final = b;
interogare(1, 1, n);
g << maxim << '\n';
} else
{
poz = a; val = b;
actualizare(1, 1, n);
}
}
return 0;
}