Professional Documents
Culture Documents
SEQ3N (giải thích)
SEQ3N (giải thích)
SEQ3N
Nguồn: AtCoder Regular Contest 074 - Problem B
https://atcoder.jp/contests/arc074/tasks/arc074_b
Với mọi phần tử của dãy A, ta tô màu theo quy tắc sau:
Ví dụ, với dãy A = [6, 2, 7, 4, 3, 8] thì một lời giải tối ưu là [6, 2, 7, 4, 3, 8].
• Các phần tử có vị trí từ 1 đến k đều được tô màu đen hoặc màu đỏ
• Các phần tử có vị trí từ k + 1 đến 3N đều được tô màu đen hoặc màu xanh
Ta xét mọi k từ N đến 2 ∗ N . Với mọi k, ta cần tìm cách tô màu đỏ hoặc đen cho k phần tử đầu,
tô màu xanh hoặc đen cho 3N − k phần tử còn lại sao cho điểm số của dãy A′ là lớn nhất. Ta
chứng minh được rằng cách tô màu tối ưu nhất như sau:
• Với k phần tử đầu, ta sẽ tô màu đỏ cho N phần tử có giá trị lớn nhất và màu đen cho k − N
phần tử còn lại.
• Với 3N − k phần tử cuối, ta sẽ tô màu xanh cho N phần tử có giá trị bé nhất và màu đen
cho 2N − k phần tử còn lại.
Nói cách khác, với cách tô màu tối ưu thì điểm số tối đa của dãy A′ sẽ là: (tổng N phần tử lớn
nhất trong k phần tử đầu tiên) - (tổng N phần tử bé nhất trong 3N − k phần tử còn lại).
Gọi:
Ta có thể tính mọi giá trị f l[i] với độ phức tạp O(N log N ) như sau:
Trước hết, tạo hàng đợi ưu tiên Q rỗng. Duyệt i từ 1 đến 2N . Với mọi i, ta thêm A[i] vào Q, đồng
thời xóa đi phần tử có giá trị nhỏ nhất trong Q (nếu kích thước của Q lớn hơn k). Với mỗi thao
tác thêm và xóa, ta cập nhật tổng một cách thích hợp.
Thực hiện tương tự, ta có thể tính mọi giá trị f r[i] với độ phức tạp O(N log N ).