Dây Đan Xen
View as PDF
Submit solution
Points:
1.00 (partial)
Time limit:
2.0s
Memory limit:
256M
Input:
stdin
Output:
stdout
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Có ~N~ vị trí được xếp theo thứ tự trên một đường tròn. Vị trí thứ ~i~ mang giá trị ~a_i~. Trong dãy có đúng ~N/2~ giá trị khác nhau, mỗi giá trị xuất hiện đúng hai lần.
Với mỗi giá trị, nối hai vị trí mang giá trị đó bằng một đoạn thẳng. Hãy tính số cặp đoạn thẳng giao nhau bên trong đường tròn. Mỗi cặp đoạn giao nhau chỉ được tính một lần.

Cấu hình Input
- Dòng đầu tiên chứa số nguyên chẵn ~N~ ~(2 ≤ N ≤ 2 · 10^6)~.
- Dòng thứ hai chứa ~N~ số nguyên ~a_1, a_2, ..., a_N~ ~(1 ≤ a_i ≤ N/2)~.
- Mỗi giá trị từ ~1~ đến ~N/2~ xuất hiện đúng hai lần.
Cấu hình Output
In ra một số nguyên duy nhất là số cặp đoạn thẳng giao nhau. Kết quả có thể vượt quá phạm vi 32-bit; hãy dùng số nguyên 64-bit.
Ví dụ
Input
8
1 2 1 3 2 4 3 4
Output
3
Giải thích
Các cặp giá trị ~(1, 2)~, ~(2, 3)~ và ~(3, 4)~ tạo thành những đoạn thẳng giao nhau. Các cặp giá trị còn lại không giao nhau.
Subtasks
- Subtask 1 (10 điểm): ~N ≤ 2 · 10^3~.
- Subtask 2 (20 điểm): ~N ≤ 2 · 10^5~.
- Subtask 3 (30 điểm): ~N ≤ 10^6~.
- Subtask 4 (40 điểm): ~N ≤ 2 · 10^6~.
Loading...