Submission
Status:
(PPPPPPPPPPPPPP)(PPPPPPPPPPP)(PPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPP)(PPPPPPPPPPPPPP)(TSSSSSSSSSSSSSSSSSSSSS)
Subtask/Task Score:
{5/5}{7/7}{8/8}{12/12}{16/16}{28/28}{0/24}
Score: 76
User: preum101
Problemset: แคง (Kang)
Language: cpp
Time: 2.109 second
Submitted On: 2026-03-26 21:05:43
#include <bits/stdc++.h>
#include "kang.h"
#pragma GCC optimize("O5,unroll-loops,inline")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
long long loca[2000001];
pair<long long,long long> tree[8000004];
vector<long long> C;
void bud(long long cl, long long cr, long long v) {
if (cl==cr) {tree[v] = {0,cl}; return ;}
long long mid = (cl+cr)/2;
bud(cl, mid, v*2);
bud(mid+1, cr, v*2+1);
tree[v] = max(tree[v*2],tree[v*2+1]);
return ;
}
void update(long long tar, long long add, long long cl, long long cr, long long v) {
if (tar>cr || tar<cl) {return ;}
if (cl==tar && cr==tar) {tree[v] = {tree[v].first+add,tree[v].second}; return ;}
long long mid = (cl+cr)/2;
update(tar, add, cl, mid, v*2);
update(tar, add, mid+1, cr, v*2+1);
tree[v] = max(tree[v*2],tree[v*2+1]);
}
vector<long long> capsize(vector<int> A, vector<int> B) {
long long n = A.size();
long long m = B.size();
C.resize(m);
set<long long> exs;
map<long long,long long> vv,rv;
for (long long i = 0; i<n; i++) exs.insert(A[i]);
for (long long i = 0; i<m; i++) exs.insert(B[i]);
long long c = 1;
for (long long e : exs) {
vv[e] = c;
rv[c] = e;
c++;
}
long long t = c-1;
bud(1,t,1);
long long cnt = 0;
for (long long i = 0; i<n; i++) {
update(vv[A[i]],A[i],1,t,1);
cnt += A[i];
}
set<long long> cut;
for (long long i = 0; i<m; i++) {
if (cut.count(B[i])==0) {
cnt += B[i];
update(vv[B[i]],B[i],1,t,1);
}
cut.insert(rv[tree[1].second]);
cnt -= tree[1].first;
update(tree[1].second,-tree[1].first,1,t,1);
C[i] = cnt;
if (cnt==0) {continue;}
}
return C;
}