Cod sursa(job #828929)
#include<fstream>
using namespace std;
int v[300000], a, b, c, n, m, i;
ifstream f("arbint.in");
ofstream g("arbint.out");
inline int max(int a,int b)
{
if (a>b)
return a;
return b;
}
void adaugare(int st,int dr,int k)
{
int mij, fs, fd;
if (st==dr)
{
v[k]=a;
return;
}
fs=2*k;
fd=fs+1;
mij=(st+dr)/2;
if (b<=mij)
adaugare(st,mij,2*k);
else
adaugare(mij+1,dr,2*k+1);
if (v[fs]>v[fd])
v[k]=v[fs];
else
v[k]=v[fd];
}
int cautare_maxim(int k,int st,int dr)
{
int fs=0,fd=0, mij;
if (a<=st && dr<=b)
return v[k];
mij=(st+dr)/2;
if (a<=mij)
fs=cautare_maxim(2*k,st,mij);
if (b>mij)
fd=cautare_maxim(2*k+1,mij+1,dr);
if (fs<fd)
return fd;
return fs;
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>a;
b=i;
adaugare(1,n,1);
}
for (i=1;i<=m;i++)
{
f>>c;
if (c==0)
{
f>>a>>b;
g<<cautare_maxim(1,1,n)<<"\n";
}
else
{
f>>b>>a;
adaugare(1,n,1);
}
}
return 0;
}