제출 #1357941

#제출 시각아이디문제언어결과실행 시간메모리
1357941po_rag526A Plus B (IOI23_aplusb)C++20
100 / 100
50 ms3124 KiB
#include "aplusb.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

void dbg() { cout << "\n"; }
template<typename H, typename... T>
void dbg(H h, T... t) {
    cout << h << " ";
    dbg(t...);
}

std::vector<int> smallest_sums(int N, std::vector<int> A, std::vector<int> B) {
	ll l = 1, r = 1e10;
	while (l < r) {
		ll mid = (l+r)/2;
		ll cnt = 0;
		for (int i = 0; i < N; i++) {
			ll need = mid-A[i];
			cnt += (upper_bound(B.begin(),B.end(),need)-B.begin());
			// dbg(i,(upper_bound(B.begin(),B.end(),need)-B.begin()));
		}
		// dbg(mid,cnt);
		if (cnt < N) l = mid+1;
		else r = mid;
		// break;
	}
	vector<int> v;
	for (int i = 0; i < N; i++) {
		int need = l-A[i];
		for (int j = 0; j < upper_bound(B.begin(),B.end(),need)-B.begin(); j++) {
			v.push_back(A[i]+B[j]);
		}
	}
	sort(v.begin(),v.end());
	vector<int> b;
	for (int i = 0; i < N; i++) b.push_back(v[i]);
	sort(b.begin(),b.end());
	// dbg(l,ans);
	return b;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...