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
*/