Pagini recente » Profil M@2Te4i | Profil marcu.iulian13 | Cod sursa (job #6046) | Cod sursa (job #1120856) | Cod sursa (job #2571750)
#include <iostream>
#include <algorithm>
#include <fstream>
int n, aint[200000];
void build() {
for(int i=n-1; i>=1; i--) {
aint[i] = std::max(aint[2*i], aint[2*i+1]);
}
}
void insert(int pos, int val) {
for(aint[pos += n] = val; pos>1; pos >>= 1) {
aint[pos>>1] = std::max(aint[pos], aint[pos^1]);
}
}
int query(int left, int right) {
int result = -1;
for(left+=n, right+=n; left<right; left>>=1, right>>=1) {
if(left&1) result = std::max(result, aint[left++]);
if(right&1) result = std::max(result, aint[--right]);
}
return result;
}
int main() {
std::ifstream fin ("arbint.in");
int m;
fin >> n >> m;
for(int i=0; i<n; i++) fin >> aint[n+i];
build();
std::ofstream fout ("arbint.out");
while(m--) {
int op, a, b;
fin >> op >> a >> b;
if(op == 0) {
fout << query(a-1, b) << "\n";
}
if(op == 1) {
insert(a-1, b);
}
}
fin.close();
fout.close();
return 0;
}