ProgMe

Untitled

Jan 31st, 2021
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int int64_t
  3.  
  4. using namespace std;
  5.  
  6. int32_t main() {
  7. int n, k, sum = 0;
  8. cin >> n >> k;
  9. vector<int> c(n), c_sort(n);
  10. multiset<int> mn, rem;
  11. for(int i = 0; i < n; i++)
  12. cin >> c[i], c_sort[i] = c[i];
  13. sort(c_sort.begin(), c_sort.end());
  14. for(int i = 0; i < k; i++){
  15. mn.insert(c_sort[i]);
  16. sum += c_sort[i];
  17. }
  18. for(int i = k; i < n; i++)
  19. rem.insert(c_sort[i]);
  20. int q;
  21. cin >> q;
  22. while(q--){
  23. string s;
  24. cin >> s;
  25. if(s.size() == 1)
  26. cout << sum << '\n';
  27. else{
  28. int idx = stoi(s.substr(1, s.size() - 1));
  29. idx--;
  30. if(s[0] == '-'){
  31. if(mn.find(c[idx]) != mn.end()){
  32. sum -= c[idx];
  33. mn.erase(mn.find(c[idx]));
  34. if(!rem.empty()) {
  35. sum += *rem.begin();
  36. mn.insert(*rem.begin());
  37. rem.erase(rem.begin());
  38. }
  39. }
  40. else
  41. rem.erase(rem.find(c[idx]));
  42. }
  43. else{
  44. if(*mn.rbegin() > c[idx]){
  45. if(mn.size() == k) {
  46. auto last = mn.end();
  47. last--;
  48. sum -= *last;
  49. rem.insert(*last);
  50. mn.erase(last);
  51. }
  52. sum += c[idx];
  53. mn.insert(c[idx]);
  54. }
  55. else
  56. rem.insert(c[idx]);
  57. }
  58. }
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment