Pagini recente » Cod sursa (job #2744636) | Cod sursa (job #3206296) | Cod sursa (job #1658490) | Cod sursa (job #809593) | Cod sursa (job #2421742)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,a[300000],val,pos,s,f,maxim;
void schimba(int nod,int l,int r)
{
if(l==r) {a[nod]=val;return;}
int mid= (l+r)/2;
if(pos<=mid) schimba(2*nod,l,mid);
else schimba(2*nod+1,mid+1,r);
a[nod] = max(a[nod*2],a[nod*2+1]);
}
void arata(int nod,int l,int r)
{
if (s<=l && r<=f)
{
if ( maxim < a[nod] ) maxim = a[nod];
return;
}
int mid = (l+r)/2;
if (s<=mid) arata(2*nod,l,mid);
if (mid<f) arata(2*nod+1,mid+1,r);
}
int main()
{
int al,ar,x;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>val;
pos=i;
schimba(1,1,n);
}
for(int i=1;i<=m;i++)
{
cin>>x>>al>>ar;
if(x==0)
{
maxim=-1;
s=al;
f=ar;
arata(1,1,n);
cout<<maxim<<'\n';
}
else
{
pos=al;
val=ar;
schimba(1,1,n);
}
}
}