canuc80k3914·15/50

Đếm Đoạn Bao Chứa

Nộp bài trên LQDOJ

Bài 39 · Sweep Line

Cho đoạn đóng đôi một khác nhau. Với mỗi đoạn, hãy đếm số đoạn khác nằm hoàn toàn trong nó và số đoạn khác chứa hoàn toàn nó.

Input

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

Output

  • Dòng đầu in số; số thứ là số đoạn khác nằm trong đoạn .
  • Dòng thứ hai in số; số thứ là số đoạn khác chứa đoạn .

Constraints

  • .
  • .
  • Không có hai đoạn hoàn toàn giống nhau.
  • Đoạn chứa khi và .

Scoring

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

Example

Test 1

Input

5
1 10
2 5
3 4
6 9
1 7

Output

4 1 0 0 2
0 2 3 1 1

Giải thích: Đoạn chứa cả bốn đoạn còn lại; chứa và . Chẳng hạn được ba đoạn chứa.

Lời giải tóm tắt
  • Ý tưởng: Sắp theo đầu trái tăng, đầu phải giảm; dùng hai lượt Fenwick trên đầu phải đã nén để đếm hai chiều chứa.
  • Ý tưởng: 1. Nén tất cả đầu phải và sắp đoạn theo (x tăng,y giảm). 2. Quét từ phải sang trái: số đầu phải đã chèn không vượt y_i là số đoạn nằm trong i. 3. Quét từ trái sang phải: số đầu phải đã chèn không nhỏ hơn y_i là số đoạn chứa i. 4. Ghi kết quả theo chỉ số ban đầu.
  • Tính đúng đắn: 1. Ở lượt phải sang trái, mọi đoạn đã chèn có đầu trái không nhỏ hơn x_i; thêm điều kiện đầu phải≤y_i đúng chính xác quan hệ nằm trong. 2. Ở lượt trái sang phải, mọi đoạn đã chèn có đầu trái không lớn hơn x_i; thêm điều kiện đầu phải≥y_i đúng chính xác quan hệ chứa. 3. Thứ tự y giảm khi x bằng nhau bảo đảm các đoạn có cùng đầu trái xuất hiện đúng phía trong hai lượt.
  • Độ phức tạp: O(n log n) thời gian và O(n) bộ nhớ.
  • Lưu ý cài đặt: Khi x bằng nhau phải sắp y giảm.
  • Lưu ý cài đặt: Kết quả phải trả theo thứ tự input.