#include <bits/stdc++.h>

using namespace std;

constexpr int N = 3e5 + 10;
constexpr int D = 86400;

vector<pair<int, int>> a; // 模拟队列(也可以理解为把所有人加入其中,后面的代码像双指针),first是每一个人到达的时间,second是每一个人的国籍
// pair可以看做有两个元素的结构体(应该都学了吧)
int flag[N]; // 有哪些国籍的人,模拟桶

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr); // 不会直接忽略,加速用的
  
    int n;
    cin >> n;

    int ans = 0; // 当前时段拥有几个国籍的人
    int h = 0; // 在前面的指针,用于得知一个时间的有效时间(就是当前t的前24h能管到哪里)
    while (n--) {
        int t, k;
        cin >> t >> k;

        for (int u = 1; u <= k; u++) {
            int x;
            cin >> x;
            a.push_back({t, x}); // 入队

            int len = a.size(); // 读取长度
            int i = len - 1; // 刚刚入队点的位置
            flag[a[i].second]++; // 该国籍拥有的人数+1 
            if (flag[a[i].second] == 1) { // 如果此时为1,说明有效时段内不存在这个国籍
                ans++; 
            } 
            while (t - a[h].first >= D) { // 如果对比队头超过了当前t的24h前
                flag[a[h].second]--; // 该国籍少一个人
                if (flag[a[h].second] == 0) ans--; // 没人了
                h++; // 队头右移
            }
        }
        cout << ans << '\n';
    }

    return 0;
}

如果觉得对你有用的话,点个赞再走吧!