有点低级的做法(按理说会超时)
#include<iostream>
#include<algorithm>
using namespace std;
int yx[100001],f[100001],g,d=0;
int n,M,t,b;
bool h[100001];
struct xx{
int tx,id;
}x[100001];
bool cmp(xx a,xx b){
if(a.tx>b.tx||(a.tx==b.tx&&a.id>b.id)){
return 1;
}
return 0;
}
int main(){
cin>>n>>M>>t;
for(int i=1;i<=M;i++){
cin>>x[i].tx>>x[i].id;
}
sort(x,x+M,cmp);
for(int i=1;i<=t;i++){
while(x[b].tx==i){
yx[x[b].id]+=2;
if(yx[x[b].id]>5&&!h[x[b].id]){
h[x[b].id]=1;
d++;
}
g++;
f[g]=x[b].id;
b++;
}
for(int j=1;j<=g;j++){
if(yx[f[g]]==0){
continue;
}
yx[f[g]]--;
if(yx[f[g]]==3){
h[f[g]]=0;
d--;
}
}
}
cout<<g;
}