Pagini recente » Cod sursa (job #828725) | Cod sursa (job #1279046) | Cod sursa (job #999232) | Cod sursa (job #139624) | Cod sursa (job #752614)
Cod sursa(job #752614)
#include <fstream>
#define LE 320
#include <cmath>
#define inf 1<<30
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,j,V[LE*LE],a,b,A[LE][LE],Maxim[LE],L,tip;
int update(int poz,int b)
{
int pozK=poz/L;
Maxim[pozK]=-inf;
A[pozK][poz%L+1]=b;
V[poz]=b;
for(j=1; j<=L+3; ++j)
if(A[pozK][j]>Maxim[pozK])
Maxim[pozK]=A[pozK][j];
}
int query(int lo,int hi)
{
int rez=-inf;
while (lo<=hi)
if (!lo%L&&lo+L<=hi)
{
rez=max(rez,Maxim[lo/L]);
lo+=L;
}
else rez=max(rez,V[lo++]);
return rez;
}
int main()
{
f>>n>>m;
/* L=sqrt(n)+1;
for(i=1; i<=n; ++i)
{
f>>V[i];
update(i,V[i]);
}
for(i=1; i<=m; ++i)
{
f>>tip>>a>>b;
if (!tip)g<<query(a,b)<<'\n';
else update(a,b);
}
*/
for(i=1;i<=n;++i) f>>V[i];
int rez;
for(i=1;i<=m;++i)
{
f>>tip>>a>>b;
if (!tip==1)
{
rez=-inf;
for(j=a;j<=b;++j)
rez=max(rez,V[j]);
g<<rez<<'\n';
}
else V[a]=b;
}
f.close();
g.close();
return 0;
}