Pagini recente » Cod sursa (job #74994) | Cod sursa (job #1155900) | Cod sursa (job #257728) | Cod sursa (job #537121) | Cod sursa (job #1647287)
#include <iostream>
#include <stdio.h>
using namespace std;
int arbint[400040];
int n,m,a,b;
int adaugare(int st, int dr, int k)
{
if(st==dr && st==a)
{
arbint[k]=b;
return b;
}
int mij=(st+dr)/2;
if(a>mij)
return arbint[k]=max(adaugare(mij+1,dr,2*k+1),arbint[2*k]);
return arbint[k]=max(adaugare(st,mij,2*k),arbint[2*k+1]);
}
int ma=-1;
void maxim(int st, int dr, int k)
{
if(st>=a && b>=dr)
{
if(arbint[k]>ma)
ma=arbint[k];
return;
}
int mij=(st+dr)/2;
if(b>=mij+1)
maxim(mij+1,dr,2*k+1);
if(a<=mij)
maxim(st,mij,2*k);
}
void citire()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
a=i;
scanf("%d",&b);
adaugare(1,n,1);
}
for(int i=0;i<m;i++)
{
int x;
scanf("%d %d %d",&x,&a,&b);
if(x==1)
adaugare(1,n,1);
else
{
ma=-1;
maxim(1,n,1);
printf("%d\n",ma);
}
}
}
int main()
{
citire();
return 0;
}