Advertisement
SorahISA

2-agojis-scrum

Apr 10th, 2023
771
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.00 KB | None | 0 0
  1. #pragma GCC optimize("Ofast", "unroll-loops")
  2. // #pragma GCC target("avx")
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. #define int int64_t
  7. #define double __float80
  8. using pii = pair<int, int>;
  9. template <typename T> using Prior = std::priority_queue<T>;
  10. template <typename T> using prior = std::priority_queue<T, vector<T>, greater<T>>;
  11.  
  12. // #define X first
  13. // #define Y second
  14. #define eb emplace_back
  15. #define ef emplace_front
  16. #define ee emplace
  17. #define pb pop_back
  18. #define pf pop_front
  19. #define ALL(x) begin(x), end(x)
  20. #define RALL(x) rbegin(x), rend(x)
  21. #define SZ(x) ((int)(x).size())
  22.  
  23. #define fastIO() ios_base::sync_with_stdio(0), cin.tie(0)
  24. template <typename T> void _do(T &&_t) {cerr << _t << "\n";}
  25. template <typename T, typename ...U> void _do(T &&_t, U &&..._u) {cerr << _t << ", ", _do(_u...);}
  26.  
  27. template <typename T, typename U> bool chmin(T &lhs, U rhs) {return lhs > rhs ? lhs = rhs, 1 : 0;}
  28. template <typename T, typename U> bool chmax(T &lhs, U rhs) {return lhs < rhs ? lhs = rhs, 1 : 0;}
  29.  
  30. void solve() {
  31.     int Q; cin >> Q;
  32.    
  33.     int ans = 0;
  34.     prior<pair<int, string>> pq;
  35.     set<string> exist, to_erase;
  36.     for (int q = 1; q <= Q; ++q) {
  37.         string op; cin >> op;
  38.        
  39.         if (op == "+") {
  40.             string str; cin >> str;
  41.             int val; cin >> val;
  42.             pq.ee(-val, str);
  43.             exist.ee(str);
  44.         }
  45.        
  46.         if (op == "-") {
  47.             string str; cin >> str;
  48.             if (exist.count(str)) to_erase.ee(str);
  49.         }
  50.        
  51.         if (op == ">") {
  52.             int N; cin >> N;
  53.             int cnt = 0;
  54.             while (cnt < N and SZ(pq)) {
  55.                 auto tp = pq.top(); pq.pop();
  56.                 if (to_erase.count(tp.second)) {
  57.                     exist.erase(tp.second);
  58.                     to_erase.erase(tp.second);
  59.                     continue;
  60.                 }
  61.                 ++cnt, ans += -tp.first;
  62.             }
  63.         }
  64.     }
  65.     cout << ans << "\n";
  66. }
  67.  
  68. void wrong_solve() {
  69.     int Q; cin >> Q;
  70.    
  71.     int ans = 0;
  72.     prior<pair<int, string>> pq;
  73.     set<string> to_erase;
  74.     for (int q = 1; q <= Q; ++q) {
  75.         string op; cin >> op;
  76.        
  77.         if (op == "+") {
  78.             string str; cin >> str;
  79.             int val; cin >> val;
  80.             pq.ee(-val, str);
  81.         }
  82.        
  83.         if (op == "-") {
  84.             string str; cin >> str;
  85.             to_erase.ee(str);
  86.         }
  87.        
  88.         if (op == ">") {
  89.             int N; cin >> N;
  90.             int cnt = 0;
  91.             while (cnt < N and SZ(pq)) {
  92.                 auto tp = pq.top(); pq.pop();
  93.                 if (to_erase.count(tp.second)) {
  94.                     to_erase.erase(tp.second);
  95.                     continue;
  96.                 }
  97.                 ++cnt, ans += -tp.first;
  98.             }
  99.         }
  100.     }
  101.     cout << ans << "\n";
  102. }
  103.  
  104. int32_t main() {
  105.     fastIO();
  106.    
  107.     int t = 1; // cin >> t;
  108.     for (int _ = 1; _ <= t; ++_) {
  109.         solve();
  110.     }
  111.    
  112.     return 0;
  113. }
  114.  
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement