Permutation Separation

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 22 Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một hoán vị \(p = (p_1, p_2, \dots, p_n)\) gồm \(n\) phần tử phân biệt từ \(1\) đến \(n\). Mỗi phần tử \(p_i\) có một trọng số (hoặc chi phí di chuyển) tương ứng là \(a_i\).

Ban đầu, bạn chọn một vị trí \(k\) (\(1 \le k < n\)) để chia hoán vị thành hai tập hợp không rỗng:

  • Tập hợp 1 (Tiền tố): gồm các phần tử \(p_1, p_2, \dots, p_k\).
  • Tập hợp 2 (Hậu tố): gồm các phần tử \(p_{k+1}, p_{k+2}, \dots, p_n\).

Sau khi chia, bạn có thể thực hiện di chuyển các phần tử giữa hai tập hợp. Mỗi lần di chuyển phần tử \(p_i\) từ Tập hợp 1 sang Tập hợp 2 (hoặc ngược lại từ Tập hợp 2 sang Tập hợp 1), bạn phải trả một chi phí bằng \(a_i\).

Yêu cầu: Hãy chọn vị trí \(k\) và các phần tử di chuyển sao cho tổng chi phí phải trả là nhỏ nhất, và sau tất cả các di chuyển, mọi phần tử trong Tập hợp 1 đều nhỏ hơn mọi phần tử trong Tập hợp 2.

Lưu ý: Nếu sau quá trình di chuyển, một trong hai tập hợp trở nên rỗng, điều kiện trên vẫn được coi là thỏa mãn.

Dữ liệu vào (Input)

  • Dòng đầu tiên chứa số nguyên \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — độ dài của hoán vị.
  • Dòng thứ hai chứa \(n\) số nguyên \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — các phần tử của hoán vị \(p\). Đảm bảo các phần tử đôi một khác nhau.
  • Dòng thứ ba chứa \(n\) số nguyên \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — chi phí di chuyển tương ứng của từng phần tử.

Dữ liệu ra (Output)

  • In ra một số nguyên duy nhất — chi phí tối thiểu để đạt được mục tiêu.

Ví dụ 1

Input:

3
3 1 2
7 1 4

Output:

4


Ví dụ 2

Input:

4
2 4 1 3
5 9 8 3

Output:

3


Ví dụ 3

Input:

6
3 5 1 6 2 4
9 1 9 9 1 9

Output:

2

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.