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

View as PDF

Points: 200 Time limit: 1.0s Memory limit: 256M Input: stdin Output: stdout

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

Comments

There are no comments at the moment.