直接模拟
#include<iostream>
#include<map>
#include<queue>
#include<cstring>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
typedef pair<int,bool>pib;
const int N = 1e4+10;
int n,h,m,s,cnt,v;
const int k=3600*24+10;
map<string,priority_queue<pib,vector<pib>,greater<pib>>>p;
unordered_map<string,int>l;
struct sxx{
string name;
int sj;
bool operator<(struct sxx g){
if(sj!=g.sj)return sj>g.sj;
return name<g.name;
}
}xs[N];
string name;
char op[3];
int rs[k];
int main(){
scanf("%d %d",&n,&v);
for(int i=0;i<n;i++){
cin>>name;
scanf("%d:%d:%d %s",&h,&m,&s,op);
if(!l[name]){
l[name]=cnt;
xs[cnt++].name=name;
}
if(op[0]=='i'){
p[name].push({h*3600+m*60+s,1});
}else p[name].push({h*3600+m*60+s,0});
}
for(auto it = p.begin();it!=p.end();it++)
{ bool flag=0;
int T;
auto a = it->second;
string u=it->first;
while(!a.empty()){
int s=a.top().first;
bool t=a.top().second;
if(t){
T=s;
flag=1;
}
else {
if(flag){
xs[l[u]].sj+=s-T;
rs[T]++,rs[s]--;
flag=0;
}
}
a.pop();
}
}
for(int i=1;i<=3600*24;++i)rs[i]+=rs[i-1];
for(int i=0;i<v;i++){
scanf("%d:%d:%d",&h,&m,&s);
int time=h*3600+m*60+s;
printf("%d\n",rs[time]);
}
sort(xs,xs+cnt);
int u=xs[0].sj;
for(int i=0;i<cnt;i++){
if(u==xs[i].sj){
cout<<xs[i].name;
printf(" ");
}else break;
}
printf("%02d:%02d:%02d",u/3600,(u-u/3600*3600)/60,u%60);
}