Pagini recente » Cod sursa (job #1501417) | Cod sursa (job #538981) | Cod sursa (job #2099889) | Cod sursa (job #1785703) | Cod sursa (job #1877906)
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
int maxarb[100000], a, b, maxim;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
void Update (int nod, int left, int right) {
if (left == right) {
maxarb[nod] = b;
return;
}
int div = (left + right) / 2;
if (a <= div) Update(nod * 2, left, div);
else Update(nod * 2 + 1, div + 1, right);
maxarb[nod] = max(maxarb[nod * 2], maxarb[nod * 2 + 1]);
}
void Query (int nod, int left, int right) {
if (left >= a && right <= b) {
if (maxim < maxarb[nod]) maxim = maxarb[nod];
return;
}
int div = (left + right) / 2;
if (a <= div) Query(nod*2, left, div);
if (div < b) Query(nod*2+1,div+1,right);
}
int main()
{
int n, m;
fin >> n >> m;
for (int i=1; i <= n; i++) {
fin >> b;
a = i;
Update(1,1,n);
}
for (int i=1; i <= m; i++) {
int x;
fin >> x >> a >> b;
if (x) Update(1,1,n);
else {
maxim = -1;
Query(1,1,n);
fout << maxim << '\n';
}
}
return 0;
}