canuc80k1608·9/50

Dãy Tăng Có Trọng Số

Nộp bài trên LQDOJ

Bài 1.7 · Fenwick Tree

Có phần tử theo thứ tự từ trái sang phải. Phần tử có chiều cao và trọng số .

Bạn được chọn một dãy con, tức một số vị trí có chỉ số tăng dần. Dãy được chọn hợp lệ khi chiều cao cũng tăng nghiêm ngặt. Giá trị của dãy là tổng trọng số tại các vị trí đã chọn.

Hãy tìm giá trị lớn nhất có thể đạt được.

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa số .
  • Dòng thứ ba chứa số .

Output

  • In tổng trọng số lớn nhất của một dãy con hợp lệ.

Constraints

  • .
  • là một hoán vị của các số .
  • .
  • Kết quả nằm trong miền của số nguyên có dấu -bit.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

6
4 2 6 1 5 3
7 4 8 5 6 10

Output

15

Giải thích: Có thể chọn các vị trí với chiều cao , tổng trọng số . Một lựa chọn khác là vị trí với chiều cao , cũng đạt , và không dãy hợp lệ nào có tổng lớn hơn.

Lời giải tóm tắt
  • Phân tích: Gọi dp[i] là tổng trọng số lớn nhất của một dãy con hợp lệ kết thúc tại vị trí i. Trước i, ta chỉ được nối từ vị trí j<i có h_j<h_i, nên
  • Phân tích: dp[i] = b_i + max(dp[j]) với j<i và h_j<h_i.
  • Phân tích: Khi quét theo chỉ số tăng dần, điều kiện j<i tự động được bảo đảm. Ta cần cấu trúc lấy cực đại theo tiền tố chiều cao; Fenwick Tree có thể thay phép cộng bằng phép max.
  • Thuật toán: Khởi tạo Fenwick Max kích thước n, mọi giá trị bằng 0.
  • Thuật toán: Duyệt i từ 1 đến n:
  • Thuật toán: tính best = query(h_i-1);
  • Thuật toán: đặt dp[i]=best+b_i;
  • Thuật toán: cập nhật vị trí h_i bằng max(giá trị cũ, dp[i]).
  • Thuật toán: Đáp án là giá trị lớn nhất trong các dp[i].
  • Chứng minh: Khi xử lý i, Fenwick tại tiền tố x lưu giá trị dp lớn nhất của mọi vị trí đã xử lý có chiều cao không vượt quá x. Điều này đúng lúc đầu và được duy trì vì mỗi dp[i] được cập nhật đúng tại chiều cao h_i bằng phép lấy cực đại.
  • Chứng minh: Do đó query(h_i-1) xét đúng tất cả và chỉ các dãy con kết thúc trước i với chiều cao cuối nhỏ hơn h_i. Nối phần tử i vào lựa chọn tốt nhất trong số đó tạo dp[i] tối ưu; trường hợp không chọn phần tử trước nào được biểu diễn bởi giá trị 0. Mọi dãy hợp lệ có một vị trí kết thúc, nên cực đại của các dp[i] là đáp án toàn cục.
  • Độ phức tạp: Mỗi vị trí dùng một truy vấn và một cập nhật Fenwick, mất O(log n). Tổng thời gian là O(n log n), bộ nhớ là O(n).