Pagini recente » Cod sursa (job #169893) | Cod sursa (job #509231) | Cod sursa (job #882631) | Cod sursa (job #26632) | Cod sursa (job #2072896)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
unsigned int h[300000], nr , idx, l, r, x, f, n, m;
int maxValue(int a, int b) {
if (a>b) return a;
else return b;
}
void update(int st, int dr, int pos) {
if (st==dr) {
h[pos] = nr;
return;
}
int mid = (st + dr)/2;
if (idx <= mid) update(st, mid, pos*2);
else update(mid+1, dr, pos*2+1);
h[pos] = maxValue(h[2*pos], h[2*pos+1]);
}
int query(int st, int dr, int pos) {
if (l<=st && dr<=r) return h[pos];
int left = 0, right = 0;
int mid = (st+dr)/2;
if (l<=mid) left = query(st, mid, 2*pos);
if (r>mid) right = query(mid+1, dr, 2*pos+1);
return maxValue(left, right);
}
int main() {
fin>>n>>m;
for (int i=1; i<=n; i++) {
fin>>x;
idx = i; nr = x;
update(1, n, 1);
}
for (int i=0; i<m; i++) {
fin>>f;
if (f) {
fin>>idx;
fin>>nr;
update(1, n, 1);
} else {
fin>>l>>r;
fout<<query(1, n, 1)<<'\n';
}
}
return 0;
}