Pagini recente » Cod sursa (job #193500) | Cod sursa (job #3214533) | Cod sursa (job #783988) | Cod sursa (job #2178694) | Cod sursa (job #1594963)
# include <bits/stdc++.h>
using namespace std;
long long arb[400005];
int m,n,c,a,b,pos,val,maxim;
void Update(int nod,int left,int right);
void Query(int nod,int left,int right);
int main(void)
{
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> n >> m;
for(int i=1;i<=n;i++){
in >> c;
val=c, pos=i;
Update(1,1,n);
}
for(int i=1;i<=m;i++){
in >> c >> a >> b;
if(c==0){
maxim=-1;
Query(1,1,n);
out << maxim << '\n';
}
else{
val=b,pos=a;
Update(1,1,n);
}
}
}
void Update(int nod,int left,int right)
{
if(left==right){
arb[nod]=val;
return;
}
int div=(left+right)/2;
if(pos<=div) Update(2*nod,left,div);
else Update(2*nod+1,div+1,right);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void Query(int nod,int left, int right){
if(a <= left && right <= b){
if(arb[nod]>maxim) maxim=arb[nod];
return;
}
int div=(left+right)/2;
if(a <= div) Query(2*nod,left,div);
if(div < b) Query(2*nod+1,div+1,right);
}