Submission

Status:

(PPPPPPPPPPPPPP)(PPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(TTTTTTTTTTTTTPPPPPPPPP)

Subtask/Task Score:

{5/5}{7/7}{8/8}{12/12}{16/16}{28/28}{0/24}

Score: 76

User: njoop

Problemset: แคง (Kang)

Language: cpp

Time: 2.099 second

Submitted On: 2025-05-23 18:10:32

#include <bits/stdc++.h>
#define pb push_back
#define pii pair<int,int>
#define f first
#define s second
#define MAXN 200005
#define MOD (int)(1e9+7)
#define INF (int)1e17
#define enl '\n'
#define int long long
#define DB(code) cout<<'\t'<<code<<'\n';
#define SP <<' '<<
using namespace std;
std::vector<long long> capsize(std::vector<signed> A, std::vector<signed> B){
    int n=A.size(),m=B.size();
    unordered_map<int,int> val;
    multiset<int> front,back;
    unordered_map<int,bool> vis;
    int sum=0;
    for(int i=0; i<n; i++) val[A[i]]+=A[i];
    for(int i=0; i<n; i++) if(!vis[A[i]]){
        front.insert(val[A[i]]);
        sum+=val[A[i]];
        vis[A[i]]=1;
    }
    vector<int> ans;
    for(int i=0; i<m; i++){
        int x=val[B[i]];
        if(x){
            auto it=front.find(x);
            if(it!=front.end()){
                sum-=*it;
                front.erase(it);
            } else{
                it=back.find(x);
                back.erase(it);
            }
        }
        val[B[i]]+=B[i];
        front.insert(x+B[i]);
        sum+=x+B[i];
        while(!front.empty() && back.size()<i+1){
            auto it=--front.end();
            sum-=*it;
            back.insert(*it);
            front.erase(it);
        }
        ans.pb(sum);
    }
    return ans;
}
/*signed main(){
    int n,m;
    cin >> n >> m;
    vector<int> A(n),B(m);
    for(int i=0; i<n; i++) cin >> A[i];
    for(int i=0; i<m; i++) cin >> B[i];
    vector<int> ans=capsize(A,B);
    for(auto x: ans) cout << x << ' ';
}*/

/*

5 4
6 3 9 6 3
4 6 9 6

8 6
3 2 2 2 2 3 3 100
5 2 2 3 4 6

*/