Pagini recente » Cod sursa (job #1837912) | Cod sursa (job #2317726) | Cod sursa (job #1958022) | Cod sursa (job #232187) | Cod sursa (job #2753292)
#include <iostream>
#include <climits>
using namespace std;
const int nMax = 100005;
int x, v[nMax], c, val, indexVal, intervalSt, intervalDr;
void actualizeaza(int pozNod, int indexSt, int indexDr) {
if (indexSt == indexDr) {
v[pozNod] = val;
return;
}
int mijIndex = (indexSt + indexDr) / 2;
if (indexVal <= mijIndex) {
actualizeaza(2 * pozNod, indexSt, mijIndex);
} else {
actualizeaza(2 * pozNod + 1, mijIndex + 1, indexDr);
}
v[pozNod] = max(v[2 * pozNod], v[2 * pozNod + 1]);
}
int interogheaza(int pozNod, int indexSt, int indexDr) {
if (intervalSt <= indexSt && indexDr <= intervalDr) {
return v[pozNod];
}
int mijIndex = (indexSt + indexDr) / 2;
int maxSt = INT_MIN, maxDr = INT_MIN;
if (intervalSt <= mijIndex) {
maxSt = interogheaza(2 * pozNod, indexSt, mijIndex);
}
if (intervalDr > mijIndex) {
maxDr = interogheaza(2 * pozNod, mijIndex + 1, indexDr);
}
return max(maxSt, maxDr);
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m;
cin >> n >> m;
for (indexVal = 1; indexVal <= n; indexVal++) {
cin >> val;
actualizeaza(1, 1, n);
}
for (int i = 0; i < m; i++) {
cin >> c;
if (c == 0) {
cin >> intervalSt >> intervalDr;
cout << interogheaza(1, 1, n) << "\n";
} else if (c == 1) {
cin >> indexVal >> val;
actualizeaza(1, 1, n);
}
}
return 0;
}