# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1171782 | bbartek | A Plus B (IOI23_aplusb) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "aplusb.h"
using namespace std;
typedef long long ll;
#define st first
#define nd second
#define pb push_back
vector<int> smallest_sums(ll n, vector<int> A, vector<int> B) {
ll pocz = A[0] + B[0],kon = A[n-1] + B[n-1],sro;
ll licznik,punkt;
while(pocz < kon){
sro = (pocz+kon)/2;
licznik = 0,punkt = n-1;
for(int i=0;i<n;i++){
if(A[i] + B[0] > sro)
break;
while(A[i] + B[punkt] > sro)
punkt--;
licznik += punkt+1;
}
if(licznik >= n){
kon = sro;
}
else{
pocz = sro+1;
}
}
vector<int> wyn;
licznik = 0,punkt = n-1;
for(int i=0;i<n;i++){
if(A[i] + B[0] > pocz)
break;
for(int j=0;j<n;j++){
if(A[i]+B[j] > pocz)
break;
wyn.pb(A[i] + B[j]);
}
}
sort(wyn.begin(),wyn.end());
if(wyn.size() > n){
wyn.resize(n);
}
return wyn;
}