Submission

Status:

(PPPPPPPPPPPPPP)(PPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(PPPPPPPPPPPPPPPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: 12345678

Problemset: แคง (Kang)

Language: cpp

Time: 0.960 second

Submitted On: 2026-03-21 19:31:28

#include <bits/stdc++.h>

using namespace std;

#define ll long long

std::vector<long long> capsize(std::vector<int> A, std::vector<int> B) {
    int n=A.size(), m=B.size(), t;
    vector<ll> res, srt;
    ll sm=0;
    priority_queue<pair<ll, ll>> pq;
    for (int i=0; i<n; i++) srt.push_back(A[i]);
    for (int i=0; i<m; i++) srt.push_back(B[i]);
    sort(srt.begin(), srt.end());
    srt.erase(unique(srt.begin(), srt.end()), srt.end());
    t=srt.size();
    vector<ll> f(t+1), used(t+1), vl(t+1);
    for (int i=1; i<=t ;i++) vl[i]=srt[i-1];
    for (int i=0; i<n; i++) A[i]=lower_bound(srt.begin(), srt.end(), A[i])-srt.begin()+1;
    for (int i=0; i<m; i++) B[i]=lower_bound(srt.begin(), srt.end(), B[i])-srt.begin()+1;
    for (int i=0; i<n;i ++) sm+=vl[A[i]], f[A[i]]++;
    for (int i=1; i<=t; i++) if (f[i]) pq.push({vl[i]*f[i], i});
    for (int i=0; i<m; i++)
    {
        if (!used[B[i]]) f[B[i]]++, pq.push({vl[B[i]]*f[B[i]], B[i]}), sm+=vl[B[i]];
        while (!pq.empty())
        {
            auto [cst, idx]=pq.top();
            pq.pop();
            if (used[idx]) continue;
            sm-=cst;
            used[idx]=1;
            break;
        }
        res.push_back(sm);
    }        
    return res;
}