Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast", "unroll-loops")
- // #pragma GCC target("avx")
- #include <bits/stdc++.h>
- using namespace std;
- #define int int64_t
- #define double __float80
- using pii = pair<int, int>;
- template <typename T> using Prior = std::priority_queue<T>;
- template <typename T> using prior = std::priority_queue<T, vector<T>, greater<T>>;
- // #define X first
- // #define Y second
- #define eb emplace_back
- #define ef emplace_front
- #define ee emplace
- #define pb pop_back
- #define pf pop_front
- #define ALL(x) begin(x), end(x)
- #define RALL(x) rbegin(x), rend(x)
- #define SZ(x) ((int)(x).size())
- #define fastIO() ios_base::sync_with_stdio(0), cin.tie(0)
- template <typename T> void _do(T &&_t) {cerr << _t << "\n";}
- template <typename T, typename ...U> void _do(T &&_t, U &&..._u) {cerr << _t << ", ", _do(_u...);}
- template <typename T, typename U> bool chmin(T &lhs, U rhs) {return lhs > rhs ? lhs = rhs, 1 : 0;}
- template <typename T, typename U> bool chmax(T &lhs, U rhs) {return lhs < rhs ? lhs = rhs, 1 : 0;}
- void solve() {
- int Q; cin >> Q;
- int ans = 0;
- prior<pair<int, string>> pq;
- set<string> exist, to_erase;
- for (int q = 1; q <= Q; ++q) {
- string op; cin >> op;
- if (op == "+") {
- string str; cin >> str;
- int val; cin >> val;
- pq.ee(-val, str);
- exist.ee(str);
- }
- if (op == "-") {
- string str; cin >> str;
- if (exist.count(str)) to_erase.ee(str);
- }
- if (op == ">") {
- int N; cin >> N;
- int cnt = 0;
- while (cnt < N and SZ(pq)) {
- auto tp = pq.top(); pq.pop();
- if (to_erase.count(tp.second)) {
- exist.erase(tp.second);
- to_erase.erase(tp.second);
- continue;
- }
- ++cnt, ans += -tp.first;
- }
- }
- }
- cout << ans << "\n";
- }
- void wrong_solve() {
- int Q; cin >> Q;
- int ans = 0;
- prior<pair<int, string>> pq;
- set<string> to_erase;
- for (int q = 1; q <= Q; ++q) {
- string op; cin >> op;
- if (op == "+") {
- string str; cin >> str;
- int val; cin >> val;
- pq.ee(-val, str);
- }
- if (op == "-") {
- string str; cin >> str;
- to_erase.ee(str);
- }
- if (op == ">") {
- int N; cin >> N;
- int cnt = 0;
- while (cnt < N and SZ(pq)) {
- auto tp = pq.top(); pq.pop();
- if (to_erase.count(tp.second)) {
- to_erase.erase(tp.second);
- continue;
- }
- ++cnt, ans += -tp.first;
- }
- }
- }
- cout << ans << "\n";
- }
- int32_t main() {
- fastIO();
- int t = 1; // cin >> t;
- for (int _ = 1; _ <= t; ++_) {
- solve();
- }
- return 0;
- }
Advertisement
Comments
-
- [wrong_solve] WA on input 02
- [solve] All accepted
Add Comment
Please, Sign In to add comment
Advertisement