Phân phòng khách sạn
Xem dạng PDF📖 Bài giảng & lời giải: đây là Bài tập 7 trong bài giảng Chuyên đề cơ bản 2: Sắp xếp, sự kiện, nén số trên blog Lập trình thuật toán – có lý thuyết, mô phỏng từng bước, gợi ý và code C++ / Python.
⚠️ Lưu ý: hãy đảm bảo em đã thật sự cố gắng tự làm bài trước, rồi mới xem gợi ý và lời giải nhé!
🎓 Khóa học Lập trình Thuật toán thi đấu của thầy Nguyễn Việt Nam Sơn – 111 buổi video, kèm cặp cá nhân, luyện thi chuyên Tin · HSG Tin học · Tin học trẻ · đội tuyển quốc gia · Olympic/ICPC. 👉 Xem chi tiết khóa học · Thành tích học viên
📞 Đăng ký học: Zalo 0767 666 702 · Facebook Nguyễn Việt Nam Sơn · 🌐 laptrinhthuattoan.blogspot.com
Có $n$ khách đặt phòng, khách thứ $i$ ở từ ngày $a_i$ tới hết ngày $b_i$. Khách sạn phân phòng như sau:
- Xét khách theo ngày đến tăng dần; nếu nhiều khách cùng ngày đến thì khách có số thứ tự nhỏ hơn được xét trước.
- Một phòng được coi là trống đối với khách đến ngày $a$ nếu người ở trước đó trong phòng đã đi, tức ngày đi $b$ của người đó thoả mãn $b \lt a$.
- Nếu có phòng trống, khách nhận phòng trống có số nhỏ nhất; nếu không có, khách sạn mở một phòng mới với số tiếp theo (các phòng được mở lần lượt có số 1, 2, 3, …).
Hãy in số phòng khách sạn đã mở và số phòng của từng khách.
Dữ liệu vào
- Dòng 1: số nguyên $n$ ($1 \le n \le 2 \cdot 10^5$).
- $n$ dòng tiếp theo, dòng thứ $i$ gồm hai số nguyên $a_i, b_i$ ($1 \le a_i \le b_i \le 10^9$).
Kết quả
- Dòng 1: số phòng đã mở.
- Dòng 2: $n$ số nguyên, số thứ $i$ là số phòng của khách thứ $i$ (theo thứ tự trong dữ liệu vào), cách nhau một dấu cách.
Sample Input
6
1 3
2 5
4 6
1 1
7 8
6 9
Sample Output
2
1 2 1 2 1 2
Bình luận