canuc80k4202·3/30

Hệ Số Sau Mỗi Trạm

Nộp bài trên LQDOJ

Bài 42 · Convex Hull Trick

Bạn đi qua trạm theo thứ tự từ đến . Trạm có mức tải . Ban đầu, hệ số chi phí của bạn là .

Tại mỗi trạm , bạn có thể bỏ qua trạm đó hoặc xử lý nó. Trạm bắt buộc phải được xử lý. Nếu hệ số hiện tại là , việc xử lý trạm có mức tải tốn . Sau khi xử lý trạm , hệ số hiện tại trở thành và được dùng cho lần xử lý tiếp theo.

Hãy tìm tổng chi phí nhỏ nhất để xử lý trạm .

Input

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

Output

  • In tổng chi phí nhỏ nhất để xử lý trạm .

Constraints

  • .
  • .
  • .
  • .
  • Đáp án nằm trong miền 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

3 5
1 3 6
4 2 1

Output

27

Giải thích: Bỏ qua trạm , xử lý trạm bằng hệ số nên tốn , rồi nhận hệ số . Xử lý trạm tốn thêm , do đó tổng chi phí là .

Lời giải tóm tắt
  • Phân tích: Giả sử trạm gần nhất đã được xử lý trước trạm i là j<i. Khi đó tổng chi phí bằng dp[j]+f_j·s_i. Ta cũng có thể bỏ qua mọi trạm trước i và dùng hệ số ban đầu, với chi phí x·s_i.
  • Phân tích: Vì thế:
  • Phân tích: dp[i] = min(x·s_i, min_{j<i}(dp[j]+f_j·s_i)).
  • Thuật toán: Xem hệ số ban đầu như đường thẳng y=x·t. Sau khi tính dp[i] bằng giá trị nhỏ nhất tại t=s_i, thêm đường y=f_i·t+dp[i] vào bao dưới. Lời giải cài đặt một Line Container động để xử lý cả các hệ số trùng nhau an toàn.
  • Chứng minh: Mọi phương án hợp lệ xử lý trạm i thuộc đúng một trong hai loại: chưa xử lý trạm nào trước đó, hoặc trạm được xử lý gần nhất là một j<i. Hai loại này lần lượt có chi phí x·s_i và dp[j]+f_j·s_i. Bao dưới chứa chính xác đường khởi đầu cùng mọi đường sinh bởi các trạng thái j<i, nên truy vấn tại s_i trả đúng dp[i]. Theo quy nạp, giá trị in ra là chi phí nhỏ nhất để xử lý trạm n.
  • Độ phức tạp: O(n log n) thời gian và O(n) bộ nhớ.