Pagini recente » Cod sursa (job #1284875) | Cod sursa (job #1593702) | Cod sursa (job #591107) | Cod sursa (job #1219739) | Cod sursa (job #2823666)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
class arbint {
int n;
vector<int> tree;
public:
arbint(const vector<int> &v) : n(v.size()), tree(n << 1 | 1) {
copy(begin(v), end(v), begin(tree) + n);
for(int i = n; i >= 1; i--)
tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
void update(int pos, int val) {
tree[pos += n] = val;
for(pos /= 2; pos >= 1; pos /= 2)
tree[pos] = max(tree[pos << 1], tree[pos << 1 | 1]);
}
int query(int st, int dr) {
int ans = 0;
for(st += n, dr += n; st <= dr; st /= 2, dr /= 2) {
if(st % 2 == 1) ans = max(ans, tree[st++]);
if(dr % 2 == 0) ans = max(ans, tree[dr--]);
}
return ans;
}
};
int main() {
int n, m;
fin >> n >> m;
vector<int> v(n + 1);
for(int i = 1; i <= n; i++)
fin >> v[i];
arbint aib(v);
while(m--) {
int t, a, b;
fin >> t >> a >> b;
if(t == 0)
fout << aib.query(a, b) << "\n";
else
aib.update(a, b);
}
return 0;
}