动态规划
#include  < stdio.h >

const   int  MAX  =   100005 ;

__int64 input[MAX];

__int64 left[MAX], right[MAX];

int  stack [MAX];

int  top;

void  inits ()
{
    top 
= -1;
}


void  push (  int  num )
{
    stack[
++top] = num;
}


void  pop ()
{

    top 
--;
}


int  main ()
{

    
int n;

    
while ( scanf ( "%d"&n ) != EOF && n )
    
{
        input[
0= input[n+1= -1;

        inits ();
        push ( 
0 );
        
for ( int i=1; i<=n; i++ )
        
{
            scanf ( 
"%I64d"&input[i] );
            
while ( input[i] <= input[ stack[top] ] )
            
{
                pop ();
            }

            left[i] 
= stack[top];
            push ( i );
        }


        inits ();
        push ( n
+1 );
        
for ( i=n; i>=1; i-- )
        
{
            
while ( input[i] <= input[ stack[top] ] )
            
{
                pop ();
            }

            right[i] 
= stack[top];
            push ( i );
        }


        __int64 max 
= -1;
        
for ( i=1; i<=n; i++ )
        
{
            __int64 temp 
= (right[i] - left[i] -1* input[i];
            
if ( max < temp )
            
{
                max 
= temp;
            }

        }


        printf ( 
"%I64d\n", max );
    }

    
return 0;
}