Pagini recente » Cod sursa (job #2885872) | Cod sursa (job #995888) | Cod sursa (job #2610320) | Cod sursa (job #3194506) | Cod sursa (job #1974340)
#include <bits/stdc++.h>
using namespace std;
vector<int> V;
int answer, newX, pos, A , B;
class SegmentTree{
public:
vector<int> elem;
void resize(int k) {
elem.resize(4 * k);
}
void build(int li, int lf, int pz) {
if(li == lf) {
elem[pz] = V[li];
return;
}
int m = li + ((lf - li) >> 1);
build(li, m, pz << 1);
build(m + 1, lf, (pz << 1) | 1);
elem[pz] = max(elem[pz << 1], elem[(pz << 1) | 1]);
}
void query(int li, int lf, int pz) {
if(A <= li && lf <= B) {
answer = max(answer, elem[pz]);
return;
}
int m = li + ((lf - li) >> 1);
if(A <= m)
query(li, m , pz << 1);
if(m < B)
query(m + 1, lf, (pz << 1) | 1);
}
void update(int li, int lf, int pz) {
if(li == lf) {
elem[pz] = newX;
return;
}
int m = li + ((lf - li) >> 1);
if(pos <= m)
update(li, m, pz << 1);
else
update(m + 1, lf, (pz << 1) | 1);
elem[pz] = max(elem[pz << 1], elem[(pz << 1) | 1]);
}
}segmentTree;
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
ios::sync_with_stdio(false);
int N, M;
int t,a,b,c;
cin >> N >> M;
V.resize(N + 1);
for(int i = 1; i <= N; ++i)
cin >> V[i];
segmentTree.resize(N);
segmentTree.build(1, N, 1);
for(int i = 1; i <= M; ++i) {
cin >> t;
if(t == 0) {
cin >> A >> B;
answer = 0;
segmentTree.query(1, N, 1);
cout << answer << "\n";
}
else {
cin >> pos >> newX;
segmentTree.update(1, N, 1);
}
}
return 0;
}