Pagini recente » Cod sursa (job #820620) | Cod sursa (job #2856603) | Cod sursa (job #2705316) | Cod sursa (job #1698789) | Cod sursa (job #1737908)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,aint[1<<18],a,b,i,getMax(int ,int ,int ),c,m,z;
void upd(int,int);
int main()
{
f>>n>>m;
for(z=1;z<n;z<<=1);
z--;
for(i=1;i<=n;i++)
{
f>>b;
upd(i,b);
}
for(i=1;i<=m;i++)
{
f>>c>>a>>b;
if(c==1)
upd(a,b);
else
g<<getMax(1,1,z+1)<<'\n';
}
return 0;
}
void upd(int poz,int val)
{
poz+=z;
aint[poz]=val;
for(poz>>=1;poz;poz>>=1)
aint[poz]=max(aint[2*poz],aint[2*poz+1]);
}
int getMax(int p,int st,int dr)
{
if(a>dr||b<st)
return 0;
if(a<=st&&dr<=b)
return aint[p];
return max(getMax(2*p,st,(st+dr)/2),getMax(2*p+1,(st+dr)/2+1,dr));
}