canuc80k7617·18/50

Tổng Các Giá Trị Nhỏ Nhất

Nộp bài trên LQDOJ

Bài 7.7 · Advanced Trees

Cho một hoán vị gồm số nguyên từ đến .

Với mỗi đoạn liên tiếp không rỗng , 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ả đoạn:

, với .

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa hoán vị .

Output

  • In một số nguyên là tổng cần tìm.

Constraints

  • .
  • là một hoán vị của .
  • Kết quả có thể vượt quá phạm vi số nguyên bit.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( 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ị lần lượt làm minimum của đoạn. Tổng đóng góp là .

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ớ.