canuc80k6005·6/15

Nghịch Thế Khi Xóa

Nộp bài trên LQDOJ

Bài 60 · CDQ Divide and Conquer

Description

Cho một hoán vị của . Có giá trị đôi một khác nhau sẽ lần lượt bị xóa khỏi dãy. Trước mỗi lần xóa, hãy in số cặp vị trí còn tồn tại mà giá trị bên trái lớn hơn giá trị bên phải.

Input

  • Dòng đầu chứa và .
  • Một dòng chứa hoán vị.
  • giá trị tiếp theo là các phần tử bị xóa theo thứ tự.

Output

  • In dòng, mỗi dòng là số nghịch thế ngay trước phép xóa tương ứng.

Constraints

  • .
  • .
  • Dãy đầu là hoán vị và các giá trị bị xóa đôi một khác nhau.

Scoring

  • Subtask ( số điểm): dữ liệu nhỏ theo giới hạn được công bố trong hệ thống chấm.
  • Subtask ( số điểm): không có giới hạn bổ sung.

Example

Test 1

Input

5 3
3 1 5 2 4
5
1
3

Output

4
2
1

Giải thích: Ban đầu có nghịch thế. Xóa làm mất hai nghịch thế nên trước lần xóa tiếp theo còn ; sau khi xóa , dãy còn đúng một nghịch thế.

Lời giải tóm tắt
  • Mô hình và thuật toán: Tính số nghịch thế ban đầu bằng Fenwick. Gán thời điểm tồn tại cho từng giá trị; hai lượt CDQ ba chiều đếm số nghịch thế bị mất khi mỗi phần tử bị xóa, rồi cập nhật đáp án tuần tự.
  • Chứng minh tính đúng đắn: Mỗi nghịch thế chứa đúng hai phần tử và biến mất ở thời điểm phần tử bị xóa sớm hơn. Hai lượt đếm lần lượt các nghịch thế mà phần tử nằm bên trái/lớn hơn và bên phải/nhỏ hơn, nên mỗi đóng góp bị trừ đúng một lần.
  • Độ phức tạp: O(n log² n) thời gian và O(n) bộ nhớ.
  • Lỗi thường gặp: Một lỗi tự nhiên là in lặp lại số nghịch thế ban đầu mà không loại đóng góp của các phần tử đã xóa.