Pagini recente » Cod sursa (job #812136) | Cod sursa (job #2903980) | Cod sursa (job #1107727) | Cod sursa (job #3154871) | Cod sursa (job #3002207)
#include <iostream>
#include <fstream>
#include <cmath>
#define nmax 100001
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, cnt;
int arb[nmax * 4 + 66];
int start, finish, poz, val, maxim;
void update(int nod, int left, int right){
if(left == right){
arb[nod] = val;
return;
}
int mid = (left + right) / 2;
if(poz <= mid){
update(nod * 2, left, mid);
}
else{
update(nod * 2 + 1, mid + 1, right);
}
arb[nod] = max(arb[2 * nod + 1], arb[2 * nod]);
}
void query(int nod, int left, int right){
if(start <= left && right <= finish){
if(maxim < arb[nod]){
maxim = arb[nod];
}
return;
}
int mid = (left + right) / 2;
if(start <= mid){
query(nod * 2, left, mid);
}
if(mid < finish){
query(nod * 2 + 1, mid + 1, right);
}
}
int main()
{
in >> n >> cnt;
for(int i = 1;i <= n;i++){
int x;
in >> x;
val = x;
poz = i;
update(1, 1, n);
}
for(int i = 1; i <= cnt;i++){
int task, a, b;
in >> task >> a >> b;
if(task == 1){
poz = a;
val = b;
update(1, 1, n);
}
else{
maxim = -1;
start = a;
finish = b;
query(1, 1, n);
out << maxim << '\n';
}
}
return 0;
}