用的是优先队列做法
#include<iostream>
#include<queue>
using namespace std;
struct ticket
{
int kind,price,time;
bool operator <(const ticket &a)const
{
return time>a.time;
}
};
priority_queue<ticket>q;
queue<ticket>m;
int n;
int main()
{
cin>>n;
int ans=0;
for(int i=1;i<=n;i++)
{
int k,p,t;
cin>>k>>p>>t;
if(!k)
{
q.push({k,p,t});
ans+=p;
}
else
{
ticket cur=q.top();
q.pop();
while(t-cur.time>45&&!q.empty())
{
cur=q.top();
q.pop();
}
if(t-cur.time>45)
{
ans+=p;
continue;
}
while(p>cur.price&&!q.empty())
{
m.push(cur);
cur=q.top();
q.pop();
}
ticket k;
while(!m.empty())
{
k=m.front();
q.push(k);
m.pop();
}
q.push(k);
if(p>cur.price)
{
ans+=p;
continue;
}
}
}
cout<<ans;
}