Pagini recente » Cod sursa (job #580777) | Cod sursa (job #2623276) | Cod sursa (job #2870479) | Cod sursa (job #2977423) | Cod sursa (job #2082822)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[100005],b[100005];
int main()
{
int n,i,j,ok,rad,m,x,y;
fin>>n>>m;
rad=sqrt(n);
for(i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]>b[i/rad]) b[i/rad]=a[i];
}
while(m--)
{
fin>>ok>>x>>y;
if(ok==1)
{
a[x]=y;
b[x/rad]=0;
int x1=(x/rad)*rad;
int y1=(x/rad)*rad +rad-1;
for(int j=x1;j<=y1;j++)
{
if(a[j]>b[x/rad]) b[x/rad]=a[j];
}
}
else
{
int maxi=0;
for(int j=x/rad+1;j<=y/rad-1;j++)
{
if(b[j]>maxi) maxi=b[j];
}
if(x/rad != y/rad)
{
for(int j=x;j/rad==x/rad;j++)
{
if(a[j]>maxi) maxi=a[j];
}
for(int j=y;j/rad==y/rad;j--)
{
if(a[j]>maxi) maxi=a[j];
}
}
else
{
for(int j=x;j<=y;j++)
{
if(a[j]>maxi) maxi=a[j];
}
}
fout<<maxi<<"\n";
}
}
}