Pagini recente » Cod sursa (job #386282) | Cod sursa (job #728095) | Cod sursa (job #2838896) | Cod sursa (job #693240) | Cod sursa (job #1580697)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int p,l,qs,qd,n,v[4*100001],pu[4*100001],pd[4*100001],Qtype,val,aux,i,Q,tn;
int query(int as,int ad,int p)
{
if (as > qd || ad < qs)
return 0;
if (as >= qs && ad <= qd)
return v[p];
return max(query(as,pd[(as+ad)],pu[p]),query((pd[(as+ad)]+1),ad,pu[p]+1));
}
int main()
{
f>>n>>Q;
aux=n;
while(aux/=2)++l;
l+=1;
tn=1<<l;
for(i=1;i<=200000;++i)
pu[i]=i<<1;
for(i=1;i<=200000;++i)
pd[i]=i>>1;
for(i=1;i<=n;++i)
{
f>>v[i-1+tn];
}
for(i=tn-1;i>0;--i)
{
v[i]=max(v[pu[i]],v[pu[i]+1]);
}
for(int k=1;k<=Q;++k)
{
f>>Qtype;
if(Qtype == 0)
{
f>>qs>>qd;
g<<query(1,tn,1)<<'\n';
}
else
{
f>>p>>val;
v[tn+p-1]=val;
for(i=pd[(tn+p-1)];i>0;i=pd[i])
v[i]=max(v[pu[i]],v[pu[i]+1]);
}
}
return 0;
}