Pagini recente » Cod sursa (job #2924793) | Cod sursa (job #2978017) | Cod sursa (job #372066) | Cod sursa (job #2172462) | Cod sursa (job #1414903)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,a[100001],c,l,st[100001],dr[100001],j,MAX[100001],t,x,y,ans,sel,sel1;
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>a[i];
c=sqrt(n);
for (i=1;i<=n;i+=c)
{
++l;
st[l]=i,dr[l]=i+c-1;
for (j=i;j<=i+c-1;j++)
if (MAX[l]<a[j])
MAX[l]=a[j];
}
for (i=1;i<=m;i++)
{
f>>t>>x>>y;
if (t==0)
{
ans=0;
sel=0;
for (j=1;j<=l;j++)
if (st[j]<=x && x<=dr[j])
sel=j;
sel1=0;
for (j=1;j<=l;j++)
if (st[j]<=y && y<=dr[j])
sel1=j;
for(j=sel+1;j<=sel1-1;j++)
ans=max(ans,MAX[j]);
for (j=x;j<=dr[sel];j++)
ans=max(ans,a[j]);
for (j=st[sel1];j<=y;j++)
ans=max(ans,a[j]);
g<<ans<<'\n';
}
else
{
for (j=1;j<=l;j++)
if (st[j]<=x && x<=dr[j])
sel=j;
a[x]=y;
MAX[sel]=a[st[sel]];
for (j=st[sel];j<=dr[sel];j++)
MAX[sel]=max(MAX[sel],a[j]);
}
}
return 0;
}