#include using namespace std; int n, t, K, x; //国籍的桶 unordered_map _map; int res; struct person { int nation; //国籍 int t; //到岸时间 }; queue q; //人员队列 person p; //人员实例 int main() { cin >> n; //n艘船 for (int i = 1; i <= n; i++) { //t:每艘船的到岸时间 //k:每艘船的人数 cin >> t >> k; //k个乘客 for (int j = 1; j <= k; j++) { cin >> x; p.nation = x; //国籍 p.t = t; //到岸时间 q.push(p); //新增加的国籍,结果才加1 if (_map[x] == 0) res++; //此国籍人数+1 _map[x]++; } //维护一个整体,加加减减解决问题,而不是每次都全新计算 while (!q.empty()) { p = q.front(); //已经超过24小时 if (p.t + 86400 <= t) { //相应国籍人数-- _map[p.nation]--; //如果减了就没有了,需要结果-1 if (_map[p.nation] == 0) res--; //弹出 q.pop(); } else break;//因为数据保证是ti是由小到大的,所以可以减枝 } //输出每艘船结果 cout << res << endl; } return 0; }