canuc80k1603·4/50

Những Cặp Đảo Thứ Tự

Nộp bài trên LQDOJ

Bài 16 · Fenwick Tree

Cho dãy số nguyên .

Một cặp chỉ số được gọi là nghịch thế khi đồng thời thỏa mãn:

  • ;
  • .

Hãy đếm tổng số nghịch thế của dãy. Hai phần tử bằng nhau không tạo thành nghịch thế.

Input

  • Dòng đầu chứa số nguyên .
  • số nguyên tiếp theo lần lượt là . Các số này có thể nằm trên một hoặc nhiều dòng.

Output

  • In một số nguyên duy nhất: số nghịch thế của dãy.

Constraints

  • .
  • .
  • Kết quả nằm trong miền của số nguyên có dấu -bit.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

6
4
1
3
2
5
2

Output

7

Giải thích: Bốn nghịch thế bắt đầu tại giá trị ; hai nghịch thế bắt đầu tại giá trị ; và giá trị tạo thêm một nghịch thế với số cuối cùng. Tổng cộng có cặp.

Lời giải tóm tắt
  • Phân tích: Khi quét dãy từ trái sang phải, tại vị trí i ta chỉ cần biết có bao nhiêu phần tử trước đó lớn hơn a[i]. Nếu đã xử lý i-1 phần tử và biết số phần tử không lớn hơn a[i], số phần tử lớn hơn là
  • Phân tích: (i-1) - count(giá trị ≤ a[i]).
  • Phân tích: Fenwick Tree có thể lưu tần suất theo giá trị. Nén tọa độ giúp lời giải vẫn áp dụng được ngay cả khi miền giá trị không liên tục.
  • Thuật toán: Sắp xếp và loại trùng các giá trị để gán hạng tăng dần cho từng a[i].
  • Thuật toán: Khởi tạo Fenwick tần suất bằng 0.
  • Thuật toán: Duyệt i từ 1 đến n:
  • Thuật toán: gọi rank là hạng của a[i];
  • Thuật toán: cộng vào đáp án (i-1) - prefix(rank);
  • Thuật toán: tăng tần suất tại rank thêm 1.
  • Thuật toán: Dùng số nguyên 64-bit cho đáp án.
  • Chứng minh: Trước khi xử lý vị trí i, Fenwick chứa đúng tần suất của các phần tử a[1..i-1]. Vì thứ tự hạng bảo toàn quan hệ so sánh, prefix(rank(a[i])) đếm chính xác các phần tử trước đó có giá trị ≤ a[i].
  • Chứng minh: Do đó (i-1)-prefix(rank(a[i])) đếm đúng các chỉ số u<i với a[u]>a[i], tức mọi nghịch thế có đầu phải bằng i. Mỗi nghịch thế có đúng một đầu phải nên được cộng đúng một lần, và cặp bằng nhau không bị tính. Tổng cuối cùng là số nghịch thế cần tìm.
  • Độ phức tạp: Nén tọa độ và quét Fenwick mất O(n log n) thời gian; bộ nhớ là O(n).