Pagini recente » Cod sursa (job #459279) | Cod sursa (job #2229584)
#include<bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,MaxArb[500001];
int st,fn,val,pos,mx;
void Up(int node,int s,int d)
{
if(s==d)
{
MaxArb[node]=val;
return;
}
int mij=(s+d)/2;
if(pos<=mij)
{
Up(2*node,s,mij);
}
else
Up(2*node+1,mij+1,d);
MaxArb[node]=max(MaxArb[node*2],MaxArb[node*2+1]);
}
void Cauta(int node,int s,int d)
{
if(st<=s && d<=fn)
{
if(mx<MaxArb[node])
mx=MaxArb[node];
return;
}
int mij=(d+s)/2;
if(st<=mij)
Cauta(node*2,s,mij);
if(mij<fn)
Cauta(node*2+1,mij+1,d);
}
int main()
{
int x;
f>>n>>m;
for(int i=1;i<=n;++i)
{
f>>x;
pos=i;
val=x;
Up(1,1,n);
}
for(int i=1;i<=m;++i)
{
int a,b;
f>>x>>a>>b;
if(x==0){
st=a,fn=b; mx=-1;
Cauta(1,1,n);
g<<mx<<'\n';
}
else
{
pos=a,val=b;
Up(1,1,n);
}
}
}