Pagini recente » Cod sursa (job #2274487) | Cod sursa (job #780582) | Cod sursa (job #2517646) | Cod sursa (job #260482) | Cod sursa (job #1110380)
#include<cstdio>
//implementare cu aib-uri
const int Dmax = 100001, infn = -1;
int arb[Dmax],v[Dmax],n;
int quest( int l, int r ) {
int p, q, m = 0;
for( p=r-(r&-r); l<=r; r=p, p-=p&-p ) {
q = ( p+1 >= l ) ? arb[r] : (p=r-1) + 1;
if( v[m] < v[q] )
m = q;
}
return m;
}
void update( int x ) {
int y, z;
for( y = x; x <= n; x += x & -x )
if( arb[x] == y ) {
z = quest( x-(x&-x) + 1, x-1 );
arb[x] = (v[z] > v[x]) ? z : x;
}
else
if( v[ arb[x] ] < v[ y ] )
arb[x] = y;
}
int main (){
FILE *in = fopen ("arbint.in","r");
FILE *out = fopen ("arbint.out","w");
//initializare
int m;
v[0] = infn ;
fscanf(in,"%d%d",&n,&m);
for(int i = 1 ; i <= n ; ++i){
fscanf(in,"%d",&v[i]);
update(i);
}
//citire intrebari
int type,a,b,sol;
while (m--){
fscanf(in,"%d%d%d",&type,&a,&b);
if(type==0){
sol=v[quest(a,b)] ;
fprintf(out,"%d\n",sol);
}else{
v[a]=b;
update(a);
}
}
fclose(in);
fclose(out);
return 0;
}