最烦TLE了,马蜂良好求调
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100000+10;
int n;
bool vehicle[MAXN];
int price[MAXN],t[MAXN];
int ticket=0,pointer=0,tickets_time[MAXN],subway_price[MAXN];
int total=0;
void Cantickets(int i)
{
pointer++;
if((tickets_time[pointer]!=-1)&&(t[i]-tickets_time[pointer]<=45)&&(subway_price[pointer]>=price[i])) tickets_time[pointer]=-1;
else
{
if(pointer<ticket) Cantickets(i);
else total+=price[i];
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n;
for(int i=0;i<n;++i)
{
cin>>vehicle[i]>>price[i]>>t[i];
}
for(int i=0;i<n;++i)
{
if(!vehicle[i])
{
ticket++;
tickets_time[ticket]=t[i];
subway_price[ticket]=price[i];
total+=price[i];
}
else
{
if(ticket>0) Cantickets(i);
else total+=price[i];
pointer=0;
}
}
cout<<total<<endl;
return 0;
}