Với mỗi đoạn liên tiếp không rỗng Al,…,Ar, lấy giá trị nhỏ nhất xuất hiện trong đoạn đó. Hãy tính tổng của các giá trị nhỏ nhất trên tất cả n(n+1)/2 đoạn:
∑min(Al,Al+1,…,Ar), với 1≤l≤r≤n.
Input
Dòng đầu chứa số nguyên n.
Dòng thứ hai chứa hoán vị A1,A2,…,An.
Output
In một số nguyên là tổng cần tìm.
Constraints
1≤n≤2⋅105.
A là một hoán vị của 1,…,n.
Kết quả có thể vượt quá phạm vi số nguyên 32 bit.
Scoring
Subtask 1 (50% số điểm): n≤200.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
5
3 1 5 2 4
Output
28
Giải thích: Các giá trị 1,2,3,4,5 lần lượt làm minimum của 8,4,1,1,1 đoạn. Tổng đóng góp là 1⋅8+2⋅4+3+4+5=28.
Lời giải tóm tắt
Đóng góp của từng phần tử: Với vị trí i, gọi L[i] là vị trí gần nhất bên trái có giá trị nhỏ hơn A[i], hoặc 0 nếu không có. Tương tự, R[i] là vị trí gần nhất bên phải có giá trị nhỏ hơn, hoặc n+1.
Đóng góp của từng phần tử: Một đoạn có A[i] làm phần tử nhỏ nhất khi đầu trái được chọn trong (L[i],i] và đầu phải trong [i,R[i]). Vì A là hoán vị nên không có trường hợp bằng nhau; số đoạn như vậy là
Đóng góp của từng phần tử:(i-L[i])·(R[i]-i).
Đóng góp của từng phần tử: Dùng hai ngăn xếp đơn điệu để tìm toàn bộ L và R, rồi cộng
Đóng góp của từng phần tử:A[i]·(i-L[i])·(R[i]-i)
Đóng góp của từng phần tử: cho mọi vị trí.
Chứng minh đúng đắn: Mọi đoạn có đúng một vị trí chứa minimum vì các giá trị phân biệt. Các biên gần nhất nhỏ hơn xác định chính xác mọi cách mở rộng quanh i mà không gặp phần tử nhỏ hơn A[i]; do đó công thức đếm đúng và không bỏ sót hay đếm trùng đoạn nào. Cộng đóng góp của tất cả vị trí chính là tổng minimum của toàn bộ đoạn.
Độ phức tạp: Hai lượt ngăn xếp và một lượt cộng tốn O(n) thời gian, O(n) bộ nhớ.