Pagini recente » Cod sursa (job #1959738) | Cod sursa (job #868842) | Cod sursa (job #2665151) | Cod sursa (job #1548241) | Cod sursa (job #2643409)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int A[10001], B[1001];
int a, b, v,i,j,maxim=-1,o;
void Citire()
{ f>>n>>m;
int num=sqrt(n);
for(i=1;i<=n;i++)
f>>A[i];
for(i=1;i<=num+1;i++)
for(j=(i-1)*num+1;j<=i*num;j++)
if(B[i]<A[j])
B[i]=A[j];
}
void Actualizare(int a, int b)
{ float nr;
int k,num,maxx=-1;
A[a]=b;
num=sqrt(n);
nr=(float)a/num;
if(nr!=(int)nr)
k=(int)nr+1;
else k=(int)nr;
for(i=(k-1)*num+1;i<=k*num;i++)
if(maxx<A[i])
maxx=A[i];
B[k]=maxx;
}
void Maxim(int a, int b)
{ float nr;
int k, q, int1, int2,num;
maxim=-1;
num=sqrt(n);
nr=(float)a/num;
if(nr!=(int)nr)
k=(int)nr+1;
else k=(int)nr;
if(a!=(k-1)*num+1)
{int1=k+1;
for(i=a;i<=k*num;i++)
if(maxim<A[i])
maxim=A[i];
}
else int1=k;
nr=(float)b/num;
if(nr!=(int)nr)
q=(int)nr+1;
else q=(int)nr;
if(b!=q*num)
{int2=q-1;
for(i=(q-1)*num+1;i<=b;i++)
if(maxim<A[i])
maxim=A[i];
}
else int2=q;
for(i=int1;i<=int2;i++)
if(maxim<B[i])
maxim=B[i];
}
int main()
{
Citire();
for(o=1;o<=m;o++)
{ f>>v>>a>>b;
if(v==0)
{
Maxim(a,b);
cout<<maxim<<'\n';
}
else {
Actualizare(a,b);
}
}
f.close();
g.close();
return 0;
}