#include <bits/stdc++.h>
using namespace std;
struct C {
string type;
int price;
int duration;
int ordered;
};
map<string, C> M;
queue<pair<C, int>> F, D;
void add(queue<pair<C, int>> &q, C x, int y) {
if (q.empty())
q.push({x, y});
else {
y = max(y, q.front().second + q.front().first.duration);
q.push({x, y});
}
}
void clean(queue<pair<C, int>> &q, int x) {
while (q.size()) {
auto [u, v] = q.front();
if (u.duration + v <= x) q.pop(); else return;
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
string cmd; while (cin >> cmd) {
if (cmd == "$ADD") {
string type;
string name;
int price;
int duration;
cin >> type >> name >> price >> duration;
if (!M.count(name))
M[name] = {type, price, duration, 0};
cout << M.size() << "\n";
/**
* Dùng linked-list
* Kiểm tra xem món này đã tồn tại chưa
* Nếu chưa tồn tại thì mới thêm
* */
}
if (cmd == "$PRICE") {
string name; cin >> name;
if (M.count(name))
cout << M[name].price << "\n";
}
if (cmd == "$ORDER") {
int hour;
int minute;
string x;
string y;
cin >> hour >> minute >> x >> y;
minute += hour * 60;
clean(F, minute);
clean(D, minute);
if (M.count(x)) {
add(M[x].type == "FOOD" ? F : D, M[x], minute);
M[x].ordered++;
}
if (M.count(y)) {
add(M[y].type == "FOOD" ? F : D, M[y], minute);
M[y].ordered++;
}
int tot = 0;
if (F.size())
tot = max(tot, F.back().first.duration + F.back().second - minute);
if (D.size())
tot = max(tot, D.back().first.duration + D.back().second - minute);
cout << tot << "\n";
}
if (cmd == "$WAIT") {
int hour, minute; cin >> hour >> minute;
minute += hour * 60;
clean(F, minute);
clean(D, minute);
cout << F.size() + D.size() << "\n";
}
if (cmd == "$COUNT") {
string name; cin >> name;
if (M.count(name))
cout << M[name].ordered << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEMgewoJc3RyaW5nIHR5cGU7CglpbnQgcHJpY2U7CglpbnQgZHVyYXRpb247CglpbnQgb3JkZXJlZDsKfTsKCm1hcDxzdHJpbmcsIEM+IE07CnF1ZXVlPHBhaXI8QywgaW50Pj4gRiwgRDsKCnZvaWQgYWRkKHF1ZXVlPHBhaXI8QywgaW50Pj4gJnEsIEMgeCwgaW50IHkpIHsKCWlmIChxLmVtcHR5KCkpCgkJcS5wdXNoKHt4LCB5fSk7CgllbHNlIHsKCQl5ID0gbWF4KHksIHEuZnJvbnQoKS5zZWNvbmQgKyBxLmZyb250KCkuZmlyc3QuZHVyYXRpb24pOwoJCXEucHVzaCh7eCwgeX0pOwoJfQp9Cgp2b2lkIGNsZWFuKHF1ZXVlPHBhaXI8QywgaW50Pj4gJnEsIGludCB4KSB7Cgl3aGlsZSAocS5zaXplKCkpIHsKCQlhdXRvIFt1LCB2XSA9IHEuZnJvbnQoKTsKCQlpZiAodS5kdXJhdGlvbiArIHYgPD0geCkgcS5wb3AoKTsgZWxzZSByZXR1cm47Cgl9Cn0KCmludCBtYWluKCkgewoJY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKDApOwoKCXN0cmluZyBjbWQ7IHdoaWxlIChjaW4gPj4gY21kKSB7CgkJaWYgKGNtZCA9PSAiJEFERCIpIHsKCQkJc3RyaW5nIHR5cGU7CgkJCXN0cmluZyBuYW1lOwoJCQlpbnQgcHJpY2U7CgkJCWludCBkdXJhdGlvbjsKCQkJY2luID4+IHR5cGUgPj4gbmFtZSA+PiBwcmljZSA+PiBkdXJhdGlvbjsKCQkJaWYgKCFNLmNvdW50KG5hbWUpKQoJCQkJTVtuYW1lXSA9IHt0eXBlLCBwcmljZSwgZHVyYXRpb24sIDB9OwoJCQljb3V0IDw8IE0uc2l6ZSgpIDw8ICJcbiI7CgkJCS8qKgoJCQkgKiBEw7luZyBsaW5rZWQtbGlzdAoJCQkgKiBLaeG7g20gdHJhIHhlbSBtw7NuIG7DoHkgxJHDoyB04buTbiB04bqhaSBjaMawYQoJCQkgKiBO4bq/dSBjaMawYSB04buTbiB04bqhaSB0aMOsIG3hu5tpIHRow6ptCgkJCSAqICovCgkJfQoJCWlmIChjbWQgPT0gIiRQUklDRSIpIHsKCQkJc3RyaW5nIG5hbWU7IGNpbiA+PiBuYW1lOwoJCQlpZiAoTS5jb3VudChuYW1lKSkKCQkJCWNvdXQgPDwgTVtuYW1lXS5wcmljZSA8PCAiXG4iOwoJCX0KCQlpZiAoY21kID09ICIkT1JERVIiKSB7CgkJCWludCBob3VyOwoJCQlpbnQgbWludXRlOwoJCQlzdHJpbmcgeDsKCQkJc3RyaW5nIHk7CgkJCWNpbiA+PiBob3VyID4+IG1pbnV0ZSA+PiB4ID4+IHk7CgkJCW1pbnV0ZSArPSBob3VyICogNjA7CgkJCWNsZWFuKEYsIG1pbnV0ZSk7CgkJCWNsZWFuKEQsIG1pbnV0ZSk7CgkJCWlmIChNLmNvdW50KHgpKSB7CgkJCQlhZGQoTVt4XS50eXBlID09ICJGT09EIiA/IEYgOiBELCBNW3hdLCBtaW51dGUpOwoJCQkJTVt4XS5vcmRlcmVkKys7CgkJCX0KCQkJaWYgKE0uY291bnQoeSkpIHsKCQkJCWFkZChNW3ldLnR5cGUgPT0gIkZPT0QiID8gRiA6IEQsIE1beV0sIG1pbnV0ZSk7CgkJCQlNW3ldLm9yZGVyZWQrKzsKCQkJfQoJCQlpbnQgdG90ID0gMDsKCQkJaWYgKEYuc2l6ZSgpKQoJCQkJdG90ID0gbWF4KHRvdCwgRi5iYWNrKCkuZmlyc3QuZHVyYXRpb24gKyBGLmJhY2soKS5zZWNvbmQgLSBtaW51dGUpOwoJCQlpZiAoRC5zaXplKCkpCgkJCQl0b3QgPSBtYXgodG90LCBELmJhY2soKS5maXJzdC5kdXJhdGlvbiArIEQuYmFjaygpLnNlY29uZCAtIG1pbnV0ZSk7CgkJCWNvdXQgPDwgdG90IDw8ICJcbiI7CgkJfQoJCWlmIChjbWQgPT0gIiRXQUlUIikgewoJCQlpbnQgaG91ciwgbWludXRlOyBjaW4gPj4gaG91ciA+PiBtaW51dGU7CgkJCW1pbnV0ZSArPSBob3VyICogNjA7CgkJCWNsZWFuKEYsIG1pbnV0ZSk7CgkJCWNsZWFuKEQsIG1pbnV0ZSk7CgkJCWNvdXQgPDwgRi5zaXplKCkgKyBELnNpemUoKSA8PCAiXG4iOwoJCX0KCQlpZiAoY21kID09ICIkQ09VTlQiKSB7CgkJCXN0cmluZyBuYW1lOyBjaW4gPj4gbmFtZTsKCQkJaWYgKE0uY291bnQobmFtZSkpCgkJCQljb3V0IDw8IE1bbmFtZV0ub3JkZXJlZCA8PCAiXG4iOwoJCX0KCX0KCglyZXR1cm4gMDsKfQ==