Pagini recente » Cod sursa (job #2295032) | Cod sursa (job #1356630) | Cod sursa (job #2821977) | Cod sursa (job #1741098) | Cod sursa (job #1916791)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, arb[400000], poz, val, q, start, stop, maxi;
void apdate(int nod, int ls, int ld){
if(ls == ld){
arb[nod] = val;
return;
}
int mij = (ls + ld) / 2;
if(poz <= mij)
apdate(nod * 2, ls, mij);
else
apdate(nod * 2 + 1, mij + 1, ld);
arb[nod] = max(arb[nod * 2], arb[nod * 2 + 1]);
}
void cueri(int nod, int ls, int ld){
if(ls > stop || ld < start)
return;
if(ls >= start && ld <= stop){
maxi = max(maxi, arb[nod]);
return;
}
int mij = (ls + ld) / 2;
cueri(nod * 2, ls, mij);
cueri(nod * 2 + 1, mij + 1, ld);
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; ++i){
fin >> val;
poz = i;
apdate(1, 1, n);
}
for(int i = 1; i <= m; ++i){
fin >> q;
if(q == 1){
fin >> poz >> val;
apdate(1, 1, n);
}
else {
fin >> start >> stop;
maxi = 0;
cueri(1, 1, n);
fout << maxi << '\n';
}
}
return 0;
}