Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int int64_t
- using namespace std;
- int32_t main() {
- int n, k, sum = 0;
- cin >> n >> k;
- vector<int> c(n), c_sort(n);
- multiset<int> mn, rem;
- for(int i = 0; i < n; i++)
- cin >> c[i], c_sort[i] = c[i];
- sort(c_sort.begin(), c_sort.end());
- for(int i = 0; i < k; i++){
- mn.insert(c_sort[i]);
- sum += c_sort[i];
- }
- for(int i = k; i < n; i++)
- rem.insert(c_sort[i]);
- int q;
- cin >> q;
- while(q--){
- string s;
- cin >> s;
- if(s.size() == 1)
- cout << sum << '\n';
- else{
- int idx = stoi(s.substr(1, s.size() - 1));
- idx--;
- if(s[0] == '-'){
- if(mn.find(c[idx]) != mn.end()){
- sum -= c[idx];
- mn.erase(mn.find(c[idx]));
- if(!rem.empty()) {
- sum += *rem.begin();
- mn.insert(*rem.begin());
- rem.erase(rem.begin());
- }
- }
- else
- rem.erase(rem.find(c[idx]));
- }
- else{
- if(*mn.rbegin() > c[idx]){
- if(mn.size() == k) {
- auto last = mn.end();
- last--;
- sum -= *last;
- rem.insert(*last);
- mn.erase(last);
- }
- sum += c[idx];
- mn.insert(c[idx]);
- }
- else
- rem.insert(c[idx]);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment