Pagini recente » Cod sursa (job #1974512) | Profil Kira | Istoria paginii utilizator/andreidumitrache1709 | Cod sursa (job #1982379) | Cod sursa (job #1081514)
#include <fstream>
#define mx(a,b) a>b?a:b
#define B(x) x&1?x-1:x+1
using namespace std;
int n,m,ai[262144],p2=1,lim;
int Build(int nod)
{
int l=nod<<1,r=l+1;
if(r<lim)
ai[nod]=mx(Build(l),Build(r));
else if(l<lim)
ai[nod]=Build(l);
return ai[nod];
}
int Max(int a,int b)
{
int nod=1,x=1,y=p2,m;
while((x<a)||(y>b))
{
m=(x+y)>>1;
if(m<a)
{
(nod<<=1)++;
x=m+1;
}
else
{
nod<<=1;
y=m;
}
}
if(y==b)
return ai[nod];
else
return mx(ai[nod],Max(y+1,b));
}
void Update(int a)
{
int l=a<<1,r=l+1,v=ai[a],b=ai[B(a)];
ai[a]=mx(ai[l],ai[r]);
if(a>1&&(ai[a]>b||v>b))
Update(a>>1);
}
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int main()
{
int o,i,j,v,b;
fin>>n>>m;
while(p2<n)
p2<<=1;
lim=p2+n;
for(i=p2;i<lim;i++)
fin>>ai[i];
Build(1);
while(m--)
{
fin>>o>>i>>j;
if(o)
{
i+=p2-1;
v=ai[i];
b=ai[B(i)];
ai[i]=j;
if(i>1&&(ai[i]>b||v>b))
Update(i>>1);
}
else
fout<<Max(i,j)<<"\n";
}
return 0;
}