KPLANK - Bán dừa

Tags: dp, stack

Problem

https://vn.spoj.com/problems/KPLANK

https://oj.vnoi.info/problem/KPLANK

Nếu các bạn biết câu chuyện thương tâm “ăn dưa leo trả vàng” của Pirate hẳn đã phải khóc hết nước mắt khi anh ấy, vì lòng thương chim, đã bán rẻ trái dưa leo siêu bự của mình.

Dưa leo cũng đã bị chim to lấy đi rồi, Pirate giờ chuyển sang nghề bán dừa để bù lỗ. Bất đắc dĩ thôi, vì trên đảo toàn là dừa…

Nhưng mà bán cái gì thì đầu tiên cũng phải có biển hiệu đã. Pirate quyết định lùng sục trên đảo các mảnh ván còn sót lại của những con tàu đắm để ghép lại thành tấm biển. Cuối cùng anh cũng tìm được N tấm ván hình chữ nhật, tấm thứ i có chiều rộng là 1 đơn vị và chiều dài là ai đơn vị. Pirate dựng đứng chúng trên mặt đất và dán lại với nhau để được một mảnh ván to hơn (xem hình minh họa).

Việc cuối cùng chỉ là đem mảnh ván này đi cưa thành tấm biển thôi. Nhưng hóa ra đây lại là công việc khó khăn nhất. Pirate rất thích hình vuông và muốn tấm biển của mình càng to càng tốt, nhưng khổ nỗi trên đảo lại không có nhiều dụng cụ đo đạc. Không êke, không thước đo độ, nên Pirate chỉ còn cách dựa vào cạnh của N tấm ván ban đầu để cưa cho thẳng thôi. Pirate chỉ có thể cưa theo những đoạn thẳng chứa một cạnh nào đó (dọc hoặc ngang) của các tấm ván.

Hãy giúp anh ấy cưa được tấm biển lớn nhất có thể.

Input

  • Dòng thứ nhất: ghi số nguyên N - số tấm ván.
  • N dòng tiếp theo: mô tả độ cao của các tấm ván theo thứ tự trái sang phải sau khi đã dán lại.

Output

  • Một số nguyên duy nhất là độ dài cạnh của tấm biển lớn nhất có thể cưa được.

Giới hạn

  • Độ cao của các tấm ván là các số nguyên dương không vượt quá 10^9.
  • 1 ≤ N ≤ 10^6.
  • 60% số test có 1 ≤ N ≤ 2000.
  • 80% số test có 1 ≤ N ≤ 10^5.

Example

Input
7  
5  
2  
4  
3  
3  
1  
4  
  
Output
3  

Giải thích: Hình dưới đây minh họa phương án tối ưu.


Tutorial


Submission

KPLANK.cpp