动态规划
#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;
}