Pagini recente » Cod sursa (job #1049865) | Cod sursa (job #2271402) | Cod sursa (job #2350404) | Cod sursa (job #2301363) | Cod sursa (job #2221441)
#include<fstream>
#include<cstring>
using namespace std;
int n,m,a,b;
int aint[400005], aux[100005];
void init(int nod, int l, int r) {
if (l==r) aint[nod]=aux[l];
else {
int mid=(l+r)/2;
init(2*nod,l,mid);
init(2*nod+1,mid+1,r);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
}
void update(int nod, int l, int r) {
if (l==r) aint[nod]=b;
else {
int mid=(l+r)/2;
if (a<=mid) update(2*nod,l,mid);
else update(2*nod+1,mid+1,r);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
}
int query(int nod, int l, int r) {
if (l>=a && r<=b) return aint[nod];
else {
int mid=(l+r)/2;
int m1 = 0, m2=0;
if (a<=mid) m1=query(2*nod,l,mid);
if (b>mid) m2=query(2*nod+1,mid+1,r);
return max(m1,m2);
}
}
int main(void) {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin>>n>>m;
for (int i=1; i<=n; ++i) cin>>aux[i];
init(1,1,n);
for (int i=1; i<=m; ++i) {
int op;
cin>>op>>a>>b;
if (op==0) cout<<query(1,1,n)<<"\n";
else update(1,1,n);
}
return 0;
}