Cho dãy số nguyên A=(a1,a2,…,aN). Một cặp chỉ số (i,j) được gọi là nghịch thế khi
1≤i<j≤N và ai>aj.
Dấu so sánh là nghiêm ngặt: nếu ai=aj thì cặp đó không phải nghịch thế. Hãy đếm tổng số nghịch thế của dãy.
Input
Dòng đầu chứa số nguyên N.
Dòng thứ hai chứa N số nguyên a1,a2,…,aN.
Output
In một số nguyên là số nghịch thế của dãy.
Constraints
1≤N≤2⋅105.
−109≤ai≤109.
Kết quả có thể vượt giới hạn số nguyên 32 bit.
Scoring
Subtask 1 (50 điểm): N≤2000.
Subtask 2 (50 điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
4
3 1 2 1
Output
4
Giải thích: Bốn nghịch thế là (1,2),(1,3),(1,4) và (3,4). Hai phần tử có giá trị 1 bằng nhau nên không tạo thêm nghịch thế.
Lời giải tóm tắt
Ý tưởng: Mọi nghịch thế thuộc đúng một trong ba nhóm: nằm hoàn toàn trong nửa trái, nằm hoàn toàn trong nửa phải, hoặc đi từ nửa trái sang nửa phải. Hai nhóm đầu được đệ quy xử lý; nhóm chéo được đếm khi gộp.
Thuật toán: Sau khi hai nửa đã tăng, dùng hai con trỏ. Nếu phần tử trái không lớn hơn phần tử phải, ghi nó trước. Ngược lại, phần tử phải hiện tại nhỏ hơn toàn bộ phần tử trái chưa dùng, nên cộng ngay số lượng mid-i rồi ghi phần tử phải.
Chứng minh tính đúng đắn: Theo quy nạp, hai lời gọi con đếm đúng mọi nghịch thế nội bộ. Trong bước gộp, khi a[i]>a[j], do nửa trái đã tăng nên chính xác các vị trí từ i đến mid-1 đều tạo nghịch thế với a[j]; thuật toán cộng mỗi cặp đúng một lần. Khi a[i]≤a[j], a[i] không thể tạo nghịch thế với a[j] hay phần tử nào đứng sau nó trong nửa phải. Do ba nhóm rời nhau và đầy đủ, tổng nhận được là đúng.
Độ phức tạp: Thời gian O(NlogN) và bộ nhớ phụ O(N).