Pagini recente » Cod sursa (job #1982772) | Cod sursa (job #2484680) | Cod sursa (job #1372597) | Cod sursa (job #1133767) | Cod sursa (job #3124868)
#include <bits/stdc++.h>
int n, queries, aint[400002], v[100002], i;
inline void build(int node, int nleft, int nright) {
if (nleft == nright)
aint[node] = v[nleft];
else {
int mid = (nleft + nright) >> 1;
build(node << 1, nleft, mid);
build((node << 1) + 1, mid + 1, nright);
aint[node] = std :: max(aint[node << 1], aint[(node << 1) + 1]);
}
}
int left, right;
inline int query(int node, int nleft, int nright) {
if (left > nright or right < nleft)
return -1;
if (left <= nleft and right >= nright)
return aint[node];
int mid = (nleft + nright) >> 1;
return std :: max(query(node << 1, nleft, mid), query((node << 1) + 1, mid + 1, nright));
}
int update_pos, val;
inline void update(int node, int nleft, int nright) {
if (nleft == nright)
aint[node] = val;
else {
int mid = (nleft + nright) >> 1;
if (update_pos <= mid)
update(node << 1, nleft, mid);
else
update((node << 1) + 1, mid + 1, nright);
aint[node] = std :: max(aint[node << 1], aint[(node << 1) + 1]);
}
}
char op;
int x, y;
int main() {
std :: ios_base :: sync_with_stdio(0);
std :: ifstream fin("arbint.in");
fin >> n >> queries;
for (i = 1; i <= n; ++ i)
fin >> v[i];
build(1, 1, n);
std :: ofstream fout("arbint.out");
while (queries) {
-- queries;
fin >> op >> x >> y;
if (op == '1') {
update_pos = x;
val = y;
update(1, 1, n);
}
else {
left = x;
right = y;
fout << query(1, 1, n) << '\n';
}
}
fin.close();
fout.close();
return 0;
}