Pagini recente » Cod sursa (job #853883) | Monitorul de evaluare | Cod sursa (job #1743979) | Cod sursa (job #1098064) | Cod sursa (job #1528093)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define MAX 400005
using namespace std;
int a, b, maximum, arbInt[MAX];
void searchMax(int node, int left, int right){
if(a <= left && right <= b){
maximum = max(maximum, arbInt[node]);
return;
}
int mid = (left+right)/2;
if(a <= mid) searchMax(2*node, left, mid);
if(b > mid) searchMax(2*node+1, mid+1, right);
}
void replaceValue(int node, int left, int right){
if(left == right){
arbInt[node] = b;
return;
}
int mid = (left+right)/2;
if(a <= mid) replaceValue(2*node, left, mid);
else replaceValue(2*node+1, mid+1, right);
arbInt[node] = max(arbInt[2*node], arbInt[2*node+1]);
}
void IntervalTree(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int N, M, op;
scanf("%d%d", &N, &M);
//dim = 2*N-1;
for(a = 1; a <= N; ++a){
scanf("%d", &b);
replaceValue(1, 1, N);
}
for(int i = 1; i <= M; ++i){
scanf("%d%d%d", &op, &a, &b);
if(op == 0){
maximum = -1;
searchMax(1, 1, N);
printf("%d\n", maximum);
}
else{
replaceValue(1, 1, N);
}
}
}
int main(){
IntervalTree();
return 0;
}