# 海港(port)


**问题描述**

小谢是海港的海关工作人员，每天都有许多船只到达海港，船上通常有很多来自不同国家的乘客。

小谢对这些到达海港的船只非常感兴趣，他按照时间记录下了到达海港的每一艘船只情况；对于第i艘到达的船，他记录了这艘船只到达的时间ti（单位：秒），船上的乘客数量Ki，以及每名乘客的国籍x（i，1），x（i，2），···，x(i,k)。

小谢统计了n艘船的信息，希望你帮忙计算出以每一艘船到达时间为止的24小时（24小时=86400秒）内所有乘船到达的乘客来自多少个不同的国家。

形式化的讲，你需要计算n条信息。对于输出的第i条信息，你需要统计满足：ti-86400<tp<=ti的船只p，在所有的x（p，j）中，总共有多少个不同的数。

**输入格式**

第1行输入一个正整数n，表示小谢统计了n艘船的信息。

接下来的n行，每行描述一艘船的信息：前两个整数ti和ki分别表示这艘船到达海港的时间和船上的乘客数量，接下来的ki个整数x(i，j)表示从小谢第一次上班开始计时，这艘船在第ti秒到达海港。

保证1<=n<=105,ki>=1,∑ki<=3×105,1<=x(i,j)<=105,1<=ti-1<ti<=109。其中∑ki表示所有ki的和。输出格式

输出n行，第i行输出一个整数表示第i艘船到达后的统计信息。

**输入样例1**

```json
3
1 4 4 1 2 2
2 2 2 3
10 1 3
```

**输出样例1**

```json
3
4
4
```

样例1说明：第一艘船在第一秒到达海港，最近24小时到达的船是第一艘船，共4个乘客，分别来自国家4，1，2，2，共来自3个不同的国家。

第2艘船在第2秒到达海港，最近24小时到达的船是第1艘船和第2艘船，共有4+2=6个乘客，分别来自国家4,1,2,2,2,3，共来自4个不同的国家；

第三艘船在第10秒到达海港，最近24小时到达的船是第1艘船、第2艘船和第3艘船，共有4+2+1=7个乘客，分别是来自国家4,1,2,2,2,3,3，共来自4个不同的国家。

**输入样例2**

```json
4
1 4 1 2 2 3
3 2 2 3
86401 2 3 4
86402 1 5
```

**输出样例2**

```json
3
3
3
4
```

样例2说明：第一艘船在第一秒到达海港，最近24小时到达的船是第1艘，共有4个乘客，分别是来自国家1,2,2,3，共来自3个不同的国家。

第2艘船是第3秒到达海港，最近24小时到达的船是第一艘船和第2艘船，共有4+2=6个乘客，分别来自1,2,2,3,2,3，共来自3个不同的国家

第3艘船是第86401秒到达海港，最近24小时到达的船是第2艘船和第3艘船，共有2+2=4个乘客，分别来自2.3,3,4，共来自3个不同的国家

第4艘船是第86402秒到达海港，最近24小时到达的船是第2艘船、第3艘船和第4艘船，共有2+2+1=5个乘客，分别来自2,3,3,4,5，共来自4个不同的国家

以下程序实现了这一功能，请你填补空白处的内容：

```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int a[100100];
int people[500100];
struct node
{
    int country;
    int time;
};
queue<node> q;
int main()
{
    int n, sum = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        int t, p;
        scanf("%d%d", &t, &p);
        node temp;
        temp.time = t;
        for (int i = 1; i <= p; i++)
        {
            int cty;
            scanf("%d", &cty);
            temp.country = cty;
            q.push(temp);
            if (!people[cty])
                sum++;
            people[cty]++;
        }
        while (1)
        {
            node old;
            old = q.front();
            if (temp.time - 86400 >= old.time)
            {
                int tc = old.country;
				_________________________;
                q.pop();
            }
            else
                break;
        }
        cout << sum << endl;
    }
    return 0;
}
```

## template

```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int a[100100];
int people[500100];
struct node
{
    int country;
    int time;
};
queue<node> q;
int main()
{
    int n, sum = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        int t, p;
        scanf("%d%d", &t, &p);
        node temp;
        temp.time = t;
        for (int i = 1; i <= p; i++)
        {
            int cty;
            scanf("%d", &cty);
            temp.country = cty;
            q.push(temp);
            if (!people[cty])
                sum++;
            people[cty]++;
        }
        while (1)
        {
            node old;
            old = q.front();
            if (temp.time - 86400 >= old.time)
            {
                int tc = old.country;
                people[tc]--;
                if (!people[tc])
                    sum--;
                q.pop();
            }
            else
                break;
        }
        cout << sum << endl;
    }
    return 0;
}
```

## 答案

```cpp
people[tc]--;
if (!people[tc])
	sum--;
```

## 选项

### A

```cpp
people[tc]++;
if (!people[tc])
	sum--;
```

### B

```cpp
people[tc]--;
if (!people[tc])
	sum++;
```

### C

```cpp
people[tc]--;
if (people[tc])
	sum--;
```