Pagini recente » Cod sursa (job #1502290) | Cod sursa (job #3218024) | Cod sursa (job #3248397) | Cod sursa (job #2329547) | Cod sursa (job #1217819)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int maxim,poz,aux1,aux2,h=1,ini,pol,i,j,st,dr,l,n,m,q,a[100005],b[420];
int posb (int x)
{
int y;
y=x%l+1;
return y;
}
int bgnx (int x)
{
int y;
y=l*x;
return y;
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
f>>a[i];
l=sqrt(n);
for (i=1;i+l-1<=n;i=i+l)
{
for (j=i;j<=i+l-1;j++)
if (a[j]>b[h])
b[h]=a[j];
h++;
}
if (i<=n)
for (j=i;j<=n;j++)
if (a[j]>b[h])
b[h]=a[j];
for (i=1;i<=m;i++)
{
f>>q;
if (q)
{
f>>ini>>pol;
a[ini]=pol;
poz=posb(ini);
for (j=bgnx(poz);j<=bgnx(poz)+l-1;j++)
if (a[j]>b[poz])
b[poz]=a[j];
}
else
{
f>>st>>dr;
aux1=posb(st);
aux2=posb(dr);
if (aux1==aux2 || aux1==aux2-1)
{
maxim=0;
for (j=st;j<=dr;j++)
if (a[j]>maxim)
maxim=a[j];
g<<maxim<<'\n';
}
else
{
maxim=0;
for (j=aux1+1;j<=aux2-1;j++)
if (b[j]>maxim)
maxim=b[j];
for (j=st;j<=bgnx(aux1)+l-1;j++)
if (a[j]>maxim)
maxim=a[j];
for (j=bgnx(aux2);j<=dr;j++)
if (a[j]>maxim)
maxim=a[j];
g<<maxim<<'\n';
}
}
}
return 0;
}