canuc80k7901·2/15

Bậc Thang Nguyên

Nộp bài trên LQDOJ

Bài 79 · Slope Trick

Cho dãy số nguyên . Hãy chọn dãy số nguyên tăng nghiêm ngặt để tổng nhỏ nhất và in chi phí nhỏ nhất.

Input

  • Dòng đầu chứa .
  • Dòng tiếp theo chứa .

Output

  • In một số nguyên là chi phí nhỏ nhất.

Constraints

  • .
  • .
  • Các trường hợp ngữ nghĩa quan trọng:
    • : . Không cần thay đổi phần tử nên chi phí bằng .
    • : đã tăng nghiêm ngặt. Có thể chọn và chi phí bằng .
    • : giảm mạnh. Nhiều phần tử phải được gom về các mức biến đổi.
    • : Giá trị gần . Phép tính tổng phải dùng số nguyên bit.

Scoring

  • Subtask ( điểm): test đầu có kích thước nhỏ, phù hợp với lời giải vét cạn mô tả trong tài liệu.
  • Subtask ( điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5
5 4 3 8 8

Output

5

Giải thích: Một lựa chọn tối ưu là với tổng độ lệch . Không tồn tại dãy tăng nghiêm ngặt nào có tổng nhỏ hơn.

Lời giải tóm tắt
  • Phân tích: Đặt X_i=A_i-i và C_i=B_i-i, khi đó C không giảm. Max-heap lưu các breakpoint của hồi quy đẳng hướng L1; khi đỉnh vượt X_i, thay breakpoint ấy bằng X_i và cộng phần chênh. Đây là biểu diễn hàm lồi/lõm theo breakpoint thay vì lưu mọi giá trị trạng thái.
  • Thuật toán: Thực hiện đúng phép cập nhật nêu trên theo thứ tự dữ liệu vào. Mọi tổng chi phí hoặc lợi nhuận dùng số nguyên 64 bit.
  • Chứng minh: Invariant của cấu trúc dữ liệu trùng với sai phân của hàm quy hoạch động sau mỗi phần tử. Mỗi thao tác chỉ thay đổi đúng các breakpoint bị tác động và cập nhật phần hằng bằng đúng mức tăng hoặc giảm của cực trị. Quy nạp theo số phần tử cho thấy trạng thái cuối biểu diễn đúng toàn bộ phương án hợp lệ, nên giá trị in ra là tối ưu.
  • Độ phức tạp: Thời gian O(N log N), bộ nhớ O(N).