Pagini recente » Cod sursa (job #3003630) | Cod sursa (job #2575646) | Cod sursa (job #2591321) | Cod sursa (job #3247283) | Cod sursa (job #2446716)
#include <fstream>
#include <iostream>
int tree[400004], position, value, a, b, n, m, op, last;
void update(int node, int left, int right){
if(left == right){
tree[node] = value;
return;
}
int mid = ((left + right)>>1);
if(position <= mid) update(2 * node, left, mid);
else update(2 * node + 1, mid + 1, right);
tree[node] = std::max(tree[2 * node], tree[2 * node + 1]);
}
int query(int node, int left, int right){
if(a <= left && right <= b)
return tree[node];
int mid = ((left + right)>>1);
int answer = 0;
if(a <= mid) answer = std::max(answer, query(2 * node, left, mid));
if(b > mid) answer = std::max(answer, query(2 * node + 1, mid + 1, right));
return answer;
}
int main()
{
std::ifstream fin("arbint.in");
std::ofstream fout("arbint.out");
fin>>n>>m;
last = n;
while(last & (last - 1)) last++;
for(position=1; position <= n; position++) {
fin>>value;
update(1, 1, last);
}
for(; m>0; m--){
fin>>op;
if(op){
fin>>position>>value;
update(1, 1, last);
}
else {
fin>>a>>b;
fout<<query(1, 1, last)<<"\n";
}
}
}