#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        vector<int>prices(n);
        for(int i=0;i<n;i++){
            cin>>prices[i];
        }
        // int profit=0;
        // for(int i=0;i<n;i++){
        //     for(int j=i+1;j<n;j++){
        //         if(prices[j]>prices[i]){
        //             profit=max(profit,prices[j]-prices[i]);
        //         }
        //     }
        // }
        // cout << profit << endl;
        //O(n2)超时

        //动态规划
        //将prices转化为涨跌幅,然后用最大连续和求,这样就是两个O(n)的操作了

        vector<int>dis(n+1);
        dis[0]=0;
        for(int i=1;i<=n;i++){
            dis[i]=prices[i]-prices[i-1];
        }
        vector<int>dp(n,0);
        int profit=0;
        for(int i=1;i<n;i++){
            dp[i]=max(dp[i-1]+dis[i],dis[i]);
            profit=max(profit,dp[i]);
        }
        cout<<profit<<endl;

        //贪心算法
        //维护一个minprice和一个maxprofit
        //因为要求后大减前小,后面的利润组合一定是当前prices和新的minprice得到的
        // int minprice=prices[0];
        // int maxprofit=0;
        // for(int i=1;i<n;i++){
        //     if(prices[i]<=minprice){
        //         minprice=prices[i];
        //     }
        //     else{
        //         maxprofit=max(maxprofit,prices[i]-minprice);
        //     }
        // }
        // cout<<maxprofit<<endl;
    }
  return 0;
}
// 64 位输出请用 printf("%lld")