01418232 Algorithm Design and Analysis 2553: cowboy

คุณเป็นพ่อค้าคนกลางรายใหญ่ในดินแดนคาวบอยทางตะวันตกแห่งหนึ่ง ปกติแล้วคุณจะเดินทางไปยังดินแดนเล็กๆข้างเคียงเพิ่อไปซื้อสินค้าราคาถูก และไปขายในดินแดนอีกแห่งในราคาที่สูงขึ้นเพื่อหาผลกำไร ซึ่งดินแดนแต่ละแห่งจะมีความชอบในสินค้าที่แตกต่างกัน จึงมีราคาซื้อขายที่แตกต่างกันในแต่ละแห่ง (ให้ถือว่า ราคาซื้อและราคาขายในดินแดนแห่งเดียวกันมีราคาเท่ากัน กล่าวคือ ถ้าซื้อและขายในดินแดนเดียวกัน ก็จะได้กำไรเป็น 0)

ในการทำธุรกิจของคุณ คุณซื้อขายสินค้าหลายอย่างและกำหนดเส้นทางในการเดินทางตามดินแดนต่างๆไว้แล้ว ซึ่งคุณจะเดินไปข้างหน้าอย่างเดียว ไม่มีการเดินถอยหลัง

ตอนนี้หินทับทิม (Ruby) กำลังฮิตในหมู่สาวคาวเกิล คุณก็เลยคิดว่าน่าจะซื้อขาย Ruby นี้ไปพร้อมๆกับสินค้าอื่นด้วย และคุณก็ไปหาข้อมูลราคา Ruby ของแต่ละเมืองเพื่อมาวิเคราะห์ว่า จะได้กำไรสูงที่สุดเท่าไหร่ถ้าซื้อและขายในดินแดนที่เหมาะสม (ย้ำว่า คุณเดินตามเส้นทางที่กำหนด จากดินแดนที่ 1 ไปยังดินแดนที่ N โดยที่ไม่มีการถอยหลัง)

จงเขียนโปรแกรมเพื่อหาว่าคุณจะได้กำไรที่มากที่สุดเป็นเท่าใด โดยควรใช้เวลาในการรันเป็น O(N log N) เพื่อให้ได้คะแนนเต็ม

ข้อมูลเข้า

 * บรรทัดที่ 1 มีจำนวนเต็ม N (1 <= N <= 100,000) จำนวนดินแดนเล็กๆทั้งหมด
 * อีก N บรรทัดต่อไปมีจำนวนเต็ม P อยู่ 1 จำนวน ซึ่งเป็นราคา Ruby ที่ผู้คนในดินแดนนั้นยอมรับ (1 <= P <= 10,000)

ข้อมูลออก
มีอยู่ 1 บรรทัด ที่มีจำนวนเต็ม 1 จำนวนแสดงถึง กำไรที่มากที่สุดที่คุณจะทำได้ในการซื้อขาย Ruby

ตัวอย่าง 1
กำหนดว่ามีดินแดนอยู่ 5 ดินแดน ดินแดนแรกที่คุณจะไปถึงให้ราคา Ruby เป็น 3 หน่วย ดินแดนที่คุณจะไปถึงถัดไปให้ราคา 4 หน่วย ฯลฯ
 * ซึ่งกำไรที่คุณจะได้สูงสุดคือ 6 หน่วย ถ้าซื้อที่ดินแดนที่ 1 (ราคา 3 หน่วย) และขายในดินแดนที่ 3 (ราคา 9 หน่วย)
 * จะเห็นว่า คุณจะซื้อในดินแดนที่ 4 (ราคา 1 หน่วย) และกลับไปขายในดินแดนที่ 3 (ราคา 9 หน่วย) ไม่ได้ ถึงแม้ว่าจะให้กำไรสูงกว่า เพราะว่าคุณไม่เดินทางถอยหลัง

ข้อกำหนด
โปรแกรมของคุณต้องหยุดการทำงานภายในเวลา 1 วินาที และใช้หน่วยความจำไม่เกิน 16 MB