Bài 19.3. Hệ Thống Quản Lý Người Dùng Trực Tuyến - [Độ khó: Khá]
Bài 19.3. Hệ Thống Quản Lý Người Dùng Trực Tuyến - [Độ khó: Khá]
Mô tả bài tập: Bạn đang phát triển một hệ thống quản lý người dùng cho một ứng dụng trò chuyện trực tuyến. Hệ thống cần theo dõi những người dùng nào đang "trực tuyến" (online) tại một thời điểm bất kỳ. Người dùng có thể đăng nhập hoặc đăng xuất. Mỗi khi có một sự kiện đăng nhập/đăng xuất, hệ thống cần báo cáo tổng số người dùng duy nhất đang trực tuyến.
INPUT FORMAT
Dòng đầu tiên chứa một số nguyên \(M\) (\(1 \le M \le 2 \cdot 10^5\)), là tổng số sự kiện (đăng nhập/đăng xuất). \(M\) dòng tiếp theo, mỗi dòng mô tả một sự kiện theo định dạng:
LOGIN ID
: Người dùng với ID này đăng nhập.LOGOUT ID
: Người dùng với ID này đăng xuất. Trong đóID
là một số nguyên dương từ \(1\) đến \(10^9\). Giả định rằng một người dùng không thể đăng nhập nếu họ đã online, và không thể đăng xuất nếu họ đang offline. (Điều này có nghĩa là mỗi lệnhLOGIN
sẽ thêm một người dùng mới vào danh sách online, và mỗi lệnhLOGOUT
sẽ xóa một người dùng hiện có khỏi danh sách online).
OUTPUT FORMAT
Sau mỗi sự kiện, in ra một số nguyên duy nhất trên một dòng mới, là tổng số người dùng đang trực tuyến sau sự kiện đó.
Ví dụ:
Input:
6
LOGIN 101
LOGIN 102
LOGIN 101
LOGOUT 101
LOGIN 103
LOGOUT 102
Output:
1
2
2
1
2
1
Giải thích:
- Ta sử dụng một
std::set<int>
để lưu trữ ID của những người dùng đang trực tuyến.set
đảm bảo mỗi ID người dùng chỉ xuất hiện một lần.
LOGIN 101
: Thêm 101 vào set. Set:{101}
. Kích thước: 1.LOGIN 102
: Thêm 102 vào set. Set:{101, 102}
. Kích thước: 2.LOGIN 101
: Thêm 101 vào set. Vì 101 đã có, set không đổi. Set:{101, 102}
. Kích thước: 2.LOGOUT 101
: Xóa 101 khỏi set. Set:{102}
. Kích thước: 1.LOGIN 103
: Thêm 103 vào set. Set:{102, 103}
. Kích thước: 2.LOGOUT 102
: Xóa 102 khỏi set. Set:{103}
. Kích thước: 1.
- Sau mỗi thao tác, in ra kích thước của set.
Comments