Thay đổi dãy số
Xem PDFTrong thư viện STL của ngôn ngữ C++, Double-ended queue (hay còn gọi là Deque) là một cấu trúc dữ liệu rất phổ biến và được sử dụng rộng rãi. Cụ thể hơn, nó là một kiểu dữ liệu tổng quát hoá của một hàng đợi, cho phép ta thực hiện thao tác thêm vào hoặc loại bỏ một phần tử ở cả hai đầu danh sách (ở cả vị trí đầu tiên và cuối cùng, trong khi đó, với hàng đợi thông thường ta chỉ có thể thêm phần tử vào cuối, và lấy ra phần tử ở đầu).
Miku đang có một Deque \(a\) gồm \(n\) phần tử, trong đó phần tử thứ \(i\) có giá trị là \(a_i\). Cô quyết định sẽ thực hiện thao tác sau chính xác \(m\) lần:
- Chọn phần tử đầu tiên hoặc phần tử cuối cùng của \(a\). (chú thích: trong bài toán này, phần tử đầu là \(a[1]\), phần tử cuối là \(a[n]\))
- Loại bỏ phần tử đó ra khỏi Deque, đồng thời \(n\) sẽ giảm đi 1.
Sau khi thực hiện xong, Miku sẽ tính tổng giá trị của những phần tử còn lại trong \(a\). Phụ thuộc vào quá trình thực hiện thao tác, tổng sau cùng có thể khác nhau. Do đó, Miku thắc mắc rằng tổng này sẽ đạt giá trị lớn nhất là bao nhiêu.
Yêu cầu: Tìm tổng lớn nhất còn lại sau khi thực hiện \(m\) thao tác.
Input
- Dòng đầu tiên gồm số nguyên dương \(n, m\) (\(1 \leq m \leq n \leq 2 \times 10^5\)).
- Dòng tiếp theo gồm một dãy \(a\) chứa \(n\) phần tử \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).
Output
- Dòng duy nhất chứa kết quả của bài toán – tổng lớn nhất còn lại.
Example
Test 1
Input
8 3
5 2 6 4 7 1 8 3
Output
26
Note
Lần lượt loại bỏ như sau: Lần 1: phần tử đầu, lần 2: phần tử cuối và lần 3: phần tử đầu. Các giá trị bị loại là \(5, 3, 2\). Tổng các phần tử còn lại là \(6 + 4 + 7 + 1 + 8 = 26\), đạt giá trị lớn nhất.
Scoring
- \(25\%\) số điểm tương ứng với \(m = 0\).
- \(25\%\) số điểm khác tương ứng với \(1 \leq m \leq 16\).
- \(25\%\) số điểm khác tương ứng với \(1 \leq m \leq n \leq 2 \times 10^3\).
- \(25\%\) số điểm còn lại không có ràng buộc gì thêm.
Kỳ thi:
- [TFL x Tân Khoa] Contest #1 "Ôn thi Tuyển sinh 10" (TS10 Chuyên Tin 2025) (18 Tháng năm, 2025)
Bình luận