use std::io::{self, *};

struct Solution {
    prices : std::vec::Vec<i32>
}

impl Solution {
    fn new(p : std::vec::Vec<i32>) -> Self{
        Solution {prices : p}
    }

    fn getMaxProfit(&self) -> i32 {
        let mut max_profit : i32 = 0;
        let mut min_p : i32 = self.prices[0];
        for num in &self.prices {
            max_profit = std::cmp::max(max_profit, *num - min_p);
            min_p = std::cmp::min(*num, min_p);
        }
        return max_profit;
    }
}

fn main() {
    let mut n:i32 = 0;
    let mut input = String::new();
    io::stdin().read_line(&mut input);
    n = input.trim().parse().unwrap();
    io::stdin().read_line(&mut input);
    let numbers: std::vec::Vec<i32> = input.split_whitespace()
        .map(|s| s.parse().expect("parse error"))
        .collect();
    print!("{}", Solution::new(numbers).getMaxProfit());
}