Pagini recente » Cod sursa (job #1221385) | Cod sursa (job #367549) | Cod sursa (job #206574) | Cod sursa (job #1307906) | Cod sursa (job #2646880)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int N,M,x,val,poz,ans, ai[400100];
void update(int st,int dr, int nod);
void query(int st,int dr, int nod);
int main()
{
cin>>N>>M;
for(int i=1; i<=N; ++i)
{
cin>>x;
val=x; poz=i;
update(1,N,1);
}
int a,b;
for(int i=1; i<=M; ++i)
{
cin>>x>>a>>b;
poz=a; val=b;
if(x==1)
update(1,N,1);
else {
ans=0;
query(1,N,1);
cout<<ans<<'\n';
}
}
return 0;
}
void update(int st,int dr, int nod)
{
if(st==dr)
{
ai[nod]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
update(st, mij, 2*nod);
else update(mij+1,dr,2*nod+1);
ai[nod]=max(ai[2*nod],ai[2*nod+1]);
}
void query(int st,int dr, int nod)
{
if(poz<=st && dr<=val)
{
ans=max(ans,ai[nod]);
return ;
}
int mij=(st+dr)/2;
if(poz<=mij)
query(st,mij,2*nod);
if(mij<val)
query(mij+1,dr,2*nod+1);
}