Pagini recente » Cod sursa (job #2599369) | Cod sursa (job #3249101) | Cod sursa (job #1252416) | Cod sursa (job #443221) | Cod sursa (job #447825)
Cod sursa(job #447825)
//Atestat work//
#include<stdio.h>
#define NMAX 100000
int A[NMAX*4+64];
int pos,val;
int p1,p2;
int ans;
//SIGSEGV?? dubios. merge pe teste.
// testing stuff..
inline int max( const int a, const int b)
{
return a>b?a:b;
}
void update( int nod, int left, int right )
{
if( left==right )
{
A[nod]=val;
return;
}
else
{
int mij=(left+right)>>1;
int aux=nod<<1;
if( pos<=mij ) update( aux, left, mij );
else update( aux+1, mij+1, right );
A[nod]=max( A[aux], A[aux+1] );
}
}
void query( int nod, int left, int right )
{
if( left>=p1 && right<=p2 )
{
ans=max( ans, A[nod] );
return;
}
if( left>p2 || right<p1 || left==right ) return;
int mij=(left+right)>>1;
int aux=nod<<1;
query( aux, left, mij );
query( aux+1, mij+1, right );
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int N,M;
scanf("%d%d",&N,&M);
int i;
for(i=1; i<=N; ++i)
{
pos=i;
scanf("%d",&val);
update( 1, 1, N );
}
int ok;
while( M-- )
{
scanf("%d",&ok);
if( ok )
{
scanf("%d%d",&pos,&val);
update( 1, 1, N );
}
else
{
ans=-1;
scanf("%d%d",&p1,&p2);
query( 1, 1, N );
printf("%d\n",ans);
}
}
return 0;
}