Submission #1000384

#TimeUsernameProblemLanguageResultExecution timeMemory
1000384thinknoexitA Plus B (IOI23_aplusb)C++17
100 / 100
39 ms5416 KiB
#include "aplusb.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
int a[100100], b[100100];
vector<int> smallest_sums(int N, vector<int> A, vector<int> B) {
	n = N;
	for (int i = 1;i <= n;i++) a[i] = A[i - 1], b[i] = B[i - 1];
	int l = 0, r = 2e9;
	while (l < r) {
		int mid = l + (r - l + 1) / 2;
		int p = n;
		ll ans = 0;
		for (int i = 1;i <= n;i++) {
			while (p > 0 && a[i] + b[p] >= mid) p--;
			ans += p;
		}
		if (ans >= n) r = mid - 1;
		else l = mid;
	}
	vector<int> ans;
	int p = n;
	for (int i = 1;i <= n;i++) {
		while (p > 0 && a[i] + b[p] >= l) p--;
		for (int j = 1;j <= p;j++) {
			ans.push_back(a[i] + b[j]);
		}
	}
	while ((int)ans.size() != n) ans.push_back(l);
	sort(ans.begin(), ans.end());
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...