Download as pdf or txt
Download as pdf or txt
You are on page 1of 1

Free Contest 98

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:

• Tô màu đen nếu phần tử đó bị xóa khỏi dãy A


• Tô màu đỏ nếu phần tử được giữ lại, và thuộc N phần tử đầu tiên của dãy A′
• Tô màu xanh nếu phần tử được giữ lại, và thuộc N phần tử cuối cùng của dãy A′

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].

Nhận xét rằng, tồn tại một só nguyên k sao cho:

• 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:

• f l[i] là tổng N phần tử lớn nhất của i phần tử đầu tiên


• f r[i] là tổng N phần tử bé nhất của các phần tử có vị trí từ i đến 3N

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 ).

Độ phức tạp: O(N log N ).

Tag: Data structure, Greedy

You might also like