Bộ thu gom rác theo thế hệ (generational GC) chia đối tượng thành Young Generation (thế hệ trẻ) và Old Generation (thế hệ già). Đối tượng mới luôn được cấp phát ở Young Generation. Mỗi lần Minor GC quét Young Generation: đối tượng không còn được truy cập bị thu hồi ngay; đối tượng còn sống được tăng "số lần sống sót" (survive count) lên 1; nếu số lần sống sót đạt ngưỡng T, đối tượng được THĂNG CẤP (promote) sang Old Generation. Old Generation trong bài này KHÔNG bao giờ bị thu gom.
Mô phỏng q "thế hệ" (epoch) liên tiếp, với ngưỡng thăng cấp T. Ở mỗi epoch, cho theo thứ tự:
k id_1 ... id_k: k đối tượng MỚI được cấp phát vào Young Generation trong epoch này (định danh chưa từng dùng, survive count khởi tạo =0).r id_1 ... id_r: danh sách r định danh đối tượng ĐANG Ở Young Generation (kể cả những đối tượng vừa cấp phát ở dòng trên) mà vẫn còn được truy cập (sống sót) sau Minor GC epoch này. Mọi đối tượng đang ở Young Generation nhưng KHÔNG có trong danh sách này bị thu hồi ngay trong epoch này.Với mỗi đối tượng sống sót: survive count +1; nếu sau đó survive count ≥T, thăng cấp sang Old Generation (rời khỏi Young Generation).
Ví dụ: T=2, 3 epoch: epoch 1 cấp phát {1,2,3}, sống sót {1,2} (đối tượng 3 bị thu hồi); epoch 2 cấp phát {4}, sống sót {1,2,4} (1,2 đạt survive count =2 nên thăng cấp lên Old); epoch 3 không cấp phát thêm, sống sót rỗng (đối tượng 4 bị thu hồi). Kết quả: Young rỗng, Old ={1,2}, tổng số bị thu hồi =2.
Dòng đầu: hai số nguyên T, q (1≤T≤100, 0≤q≤500). Với mỗi trong q epoch, có ĐÚNG 2 dòng như mô tả ở trên (LUÔN có đủ 2 dòng, kể cả khi k=0 hoặc r=0 thì dòng đó chỉ có duy nhất số 0). Đảm bảo mọi định danh trong dòng thứ 2 là tập con hợp lệ của các đối tượng đang tồn tại trong Young Generation tại thời điểm đó; toàn bộ định danh đối tượng xuất hiện trong input là duy nhất.
In 3 dòng:
Với ví dụ trên, kết quả là:
1 2
2
Ví dụ:
Đầu vào:
1 1
1 1
1 1
Đầu ra:
1
0
Đầu vào:
2 3
3 1 2 3
2 1 2
1 4
3 1 2 4
0
0
Đầu ra:
1 2
2
Đang tải editor...