#include <iostream>
#include <list>
using namespace std;
const int USEFUL = 45;
typedef long long lglg;
struct ticket{
int cost;
lglg time;
ticket(int c = 0,lglg t = 0){
cost = c;
time = t;
}
};
bool findt(int c,lglg t,list<ticket>& fre){
while (fre.front().time < t)
fre.pop_front();
//start >= t
for (list<ticket>::iterator it = fre.begin();it != fre.end();++it){
if (it->cost >= c){
fre.erase(it);
return true;
}
}
return false;
}
int main(void){
int n = 0;
cin>>n;
lglg temp[3];
lglg paid = 0;
lglg& type = temp[0];
lglg& cost = temp[1];
lglg& time = temp[2];
list<ticket> fre;
for (int i = 0;i < n;++i){
cin>>type>>cost>>time;
if (type){
if (findt(cost,time,fre))
continue;
else
paid += cost;
}else{
paid += cost;
fre.push_back(ticket(cost,time+USEFUL));
}
}
cout<<paid<<endl;
return 0;
}
以上,不吸氧也可以AC。
但如果把这里所有的list都换成deque,那么程序会从#13开始RE。