canuc80k3902·3/50

Mức Phủ Trên Trục Số

Nộp bài trên LQDOJ

Bài 39 · Sweep Line

Cho đoạn đóng có đầu mút nguyên. Với mỗi từ đến , hãy đếm số tọa độ nguyên được đúng đoạn phủ.

Input

  • Dòng đầu chứa số nguyên .
  • Mỗi trong dòng tiếp theo chứa hai số nguyên và .

Output

  • In số; số thứ là số tọa độ nguyên được đúng đoạn phủ.

Constraints

  • .
  • .
  • Các đoạn có thể trùng nhau, lồng nhau hoặc suy biến thành một điểm.

Scoring

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

Example

Test 1

Input

4
0 2
2 4
4 4
1 3

Output

1 3 1 0

Giải thích: Tọa độ được phủ một lần; các tọa độ được phủ hai lần; tọa độ được phủ ba lần. Không có tọa độ nào được cả bốn đoạn phủ.

Lời giải tóm tắt
  • Ý tưởng: Tạo sai phân +1 tại l_i, -1 tại r_i+1 và quét các tọa độ sự kiện.
  • Ý tưởng: 1. Cộng ev[l_i]++, ev[r_i+1]-- trong một map có khóa đã sắp. 2. Duy trì prev và cover. Trước khi áp dụng delta tại x, cộng x-prev vào ans[cover]. 3. Sau đó cập nhật cover += delta và đặt prev=x.
  • Tính đúng đắn: 1. Không có đầu mút nào nằm trong [prev,x), nên tập đoạn phủ mọi điểm nguyên ở đó là như nhau. 2. Đoạn [prev,x) chứa đúng x-prev điểm nguyên; cộng lượng này vào ans[cover] là chính xác. 3. Các khoảng giữa sự kiện phân hoạch toàn bộ tập điểm được phủ, nên không đếm thiếu hoặc trùng.
  • Độ phức tạp: O(n log n) thời gian, O(n) bộ nhớ.
  • Lưu ý cài đặt: Dùng r thay vì r+1 cho đoạn nguyên đóng.
  • Lưu ý cài đặt: Tràn số khi lưu đáp án hoặc r+1.
  • Lưu ý cài đặt: Cập nhật delta trước khi cộng độ dài của khoảng trước.