Cho n đoạn đóng có đầu mút nguyên. Với mỗi k từ 1 đến n, hãy đếm số tọa độ nguyên được đúng k đoạn phủ.
Input
Dòng đầu chứa số nguyên n.
Mỗi trong n dòng tiếp theo chứa hai số nguyên li và ri.
Output
In n số; số thứ k là số tọa độ nguyên được đúng k đoạn phủ.
Constraints
1≤n≤2⋅105.
0≤li≤ri≤1018.
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 1 (50% số điểm): n≤10 và ri≤100.
Subtask 2 (50% 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 độ 0 được phủ một lần; các tọa độ 1,3,4 được phủ hai lần; tọa độ 2 đượ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.