#include #include #include #include using namespace std; using namespace atcoder; using ll = long long; int main () { int N, M; cin >> N >> M; vector A(N), B(M); for (int i = 0; i < N; i++) { cin >> A[i]; } for (int i = 0; i < M; i++) { cin >> B[i]; } // k固定のとき -> タコ焼き機昇順k個を購入で、クーポンは割合の高いものを高額なものに割り当てる貪欲 // k固定でない -> 昇順k個とクーポン降順k個の各点積の和がたくさん欲しい -> convolution for (int i = 0; i < N; i++) { A[i] /= 100; } vector C(max(N, M), 0); for (int i = 0; i < max(N, M); i++) { if (i < M) { C[i] = B[i]; } C[i] = 100 - C[i]; } sort(A.begin(), A.end()); sort(C.begin(), C.end()); auto ret = convolution_ll(A, C); for (int i = 0; i < N; i++) { cout << ret[i] << "\n"; } }