Pagini recente » Cod sursa (job #446370) | Cod sursa (job #1233678) | Cod sursa (job #3132181) | Cod sursa (job #2591720) | Cod sursa (job #1650172)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arbore[4 * 100000 + 50], n, m, val, pos, i, st, dr, q;
void updateArbore(int nod, int lhs, int rhs) {
if (lhs == rhs) {
arbore[nod] = val;
return;
}
int mijl = ( lhs + rhs ) / 2;
if (pos <= mijl)
updateArbore(nod * 2, lhs, mijl);
else
updateArbore(nod * 2 + 1, mijl + 1, rhs);
arbore[nod] = max(arbore[nod * 2], arbore[nod * 2 + 1]);
}
int findMax(int nod, int lhs, int rhs) {
if (lhs > dr || rhs < st)
return -1;
int mijl = ( lhs + rhs ) / 2;
if (lhs >= st && rhs <= dr)
return arbore[nod];
return max(findMax(nod * 2, lhs, mijl), findMax(nod * 2 + 1, mijl + 1, rhs));
}
int main()
{
fin>>n>>m;
for (i = 1 ; i <= n ; i++) {
fin>>val; pos = i;
updateArbore(1, 1, n);
}
for (i = 1 ; i <= m ; i++) {
fin>>q>>pos>>val;
if (q == 1) {
updateArbore(1, 1, n);
} else {
st = pos; dr = val;
fout<<findMax(1, 1, n)<<'\n';
}
}
return 0;
}