解题思路:单个订单处理肯定超时,所以批量处理某时刻的订单,通过借助三个数组来实现;
#include
#include
#define long long LL
using namespace std;
const int N = 1e5+7;
typedef pair<int ,int > PII;
// 下标为店铺id
int score[N]; //此时刻店铺分数
int last[N]; //上一次接收到订单的时刻
bool it[N]; //是否进入优先缓存
PII a[N];
int main()
{
int n,m,T;
cin>>n>>m>>T;
for(int i=0;i<m;i++) scanf("%d%d",&a[i].first ,&a[i].second );
sort(a,a+m);
for(int i=0;i<m;){
int j=i;
while(a[i]==a[j] && j<m) j++;
int t = a[i].first , id = a[i].second ,cnt = j-i;
i=j;
score[id]-= t - last[id] - 1;
if(score[id]<0) score[id] =0;
if(score[id]<=3) it[id] = 0;
score[id] += cnt*2;
if(score[id]>5) it[id] = 1;
last[id] = t;
}
for(int i=1;i<=n;i++)
if(last[i]<T){
score[i] -= T-last[i];
if(score[i]<=3) it[i] = 0;
}
int ans=0;
for(int i=1;i<=n;i++) ans+=it[i];
cout<<ans<<endl;
return 0;
}