题目链接:
http://210.44.144.221/problem.php?cid=1002&pid=0
按照人数来入队,如果按照船来入队的话会超时,他还很是明确的提醒了∑ki≤3∗105:所以如果按照船来储存不行的话,那就通过人头来储存吧:
代码:
#include <iostream>
#include <cstring>
#include <queue>
#include <stdio.h>
using namespace std;
const int inf=3e5+7;
const int theinf=1e5+7;
struct node
{
int people;
int time;
};
int vis[inf];
int main()
{
queue<node>que; //½øÐÐÅжϰÕÁË¡£
memset(vis,0,sizeof(vis));
int n;
long long ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int k,nowtime;
scanf("%d %d",&nowtime,&k);
node now;
if( !que.empty() )now=que.front();
while(now.time+86400<=nowtime&&!que.empty())
{
vis[now.people]--;
if( vis[now.people]==0 )ans--;
que.pop();
now=que.front();
}
node temp;
for(int j=0;j<k;j++)
{
temp.time=nowtime;
int thepeo;
scanf("%d",&thepeo);
temp.people=thepeo;
if(vis[thepeo]==0)ans++;
vis[thepeo]++;
que.push(temp);
}
printf("%lld\n",ans);
}
return 0;
}