这是我之前写的一篇(码凤较丑,见谅):
#include<bits/stdc++.h>
using namespace std;
struct node
{
int t;
int n;
}q[5000000];
int front,rear,n,vis[5000000],sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int t,k;
cin>>t>>k;
for(int j=1;j<=k;j++)
{
int x;
cin>>x;
q[rear].t=t;
q[rear].n=x;
rear++;
vis[x]++;
if(vis[x]==1)
{
sum++;
}
}
while(1)
{
int a=q[front].t,b=q[front].n;
if(t-a<86400)
{
break;
}
vis[b]--;
if(vis[b]==0)
{
sum--;
}
front++;
}
cout<<sum<<endl;
}
return 0;
}
今天又做了一遍,结果只有40pts,其他全WA(相对之前码凤较好):
#include <bits/stdc++.h>
using namespace std;
#define maxm 10000005
#define int long long
#define _for(i, a, b) for (int i = (a); i <= (b); i++)
#define maxn maxm
struct sea {
int t, nation;
}s[maxm];
int n, ans;
int head = 1, tail;
int sum[maxn];
int t[maxn], num[maxn];
signed main() {
//freopen("luoguP2058.in", "r", stdin);
//freopen("luoguP2058.out", "w", stdout);
scanf("%lld", &n);
_for (i, 1, n) {
scanf("%lld%lld", t + i, num + i);
_for (j, 1, num[i]) {
scanf("%lld", &s[++tail].nation);
s[tail].t = t[i];
sum[s[tail].nation]++;
if (sum[s[tail].nation] == 1)
ans++;
}
while(t[i] - s[head].t >= 86400) {
sum[s[tail].nation]--;
if(!sum[s[tail].nation])
ans--;
head++;
}
printf("%lld\n", ans);
}
return 0;
}