Pagini recente » Cod sursa (job #47309) | Cod sursa (job #3266092) | Cod sursa (job #734855) | Cod sursa (job #2701691) | Cod sursa (job #3180063)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100005];
int aint[400005];
void build(int nod, int st, int dr){
if(st == dr){
aint[nod] = v[st];
return;
}
int med = (st + dr) / 2;
build(nod * 2, st, med);
build(nod * 2 + 1, med + 1, dr);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
int poz, val, l, r, M;
void update(int nod, int st, int dr){
if(st == dr){
aint[nod] = val;
return;
}
int med = (st + dr) / 2;
if(poz <= med) update(2 * nod, st, med);
else update(2 * nod + 1, med + 1, dr);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
void query(int nod, int st, int dr){
if(st >= l && dr <= r){
M = max(M, aint[nod]);
return;
}
int med = (st + dr) / 2;
if(l <= med) query(nod * 2, st, med);
if(r > med) query(nod * 2 + 1, med + 1, dr);
}
int main()
{
int n,m,i,a,b,c;
fin >> n >> m;
for(i = 1; i <= n; i++) fin >> v[i];
build(1,1,n);
for(i = 1; i <= m; i++){
fin >> a;
if(a){
fin >> poz >> val;
update(1,1,n);
}
else{
fin >> l >> r;
M = 0;
query(1,1,n);
fout << M << "\n";
}
}
return 0;
}