Biến đổi dãy nhị phân

Xem PDF

Điểm: 200 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho dãy số \(a_1, a_2, ..., a_n\), trong đó \(a_i = 0\) hoặc \(1\). Mỗi thao tác, bạn được chọn hai số kề nhau và hoán đổi chúng. Hãy tìm số thao tác ít nhất để sắp xếp dãy \(a\) tăng dần.

Ví dụ, \(a = [1, 0, 0]\). Chúng ta cần 2 thao tác.

  • Thao tác 1: Hoán đổi \(a_1\)\(a_2\). \(a = [0, 1, 0]\).
  • Thao tác 2: Hoán đổi \(a_2\)\(a_3\). \(a = [0, 0, 1]\). Lúc này dãy \(a\) đã được sắp xếp tăng dần.

Input

  • Dòng đầu chứa một số tự nhiên \(n\), độ dài của dãy. \((1 \leq n \leq 5 * 10^5)\)
  • Dòng thứ hai chứa \(n\) số tự nhiên \(a_1, a_2, ..., a_n \ (0 \leq a_i \leq 1)\)

Output

  • In ra một số tự nhiên là số thao tác ít nhất cần sử dụng

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(n \leq 10\)
  • Subtask \(2\) (\(30\%\) số điểm): \(n \leq 1000\)
  • Subtask \(3\) (\(40\%\) số điểm): \(n \leq 5 * 10^5\)

Example

Test 1

Input
3
1 0 0
Output
2

Test 2

Input
4
0 0 1 1
Output
0

Bình luận (1)

Sắp xếp theo
Tải bình luận...