Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <iostream>

using namespace std;

void quickSort(long long a[], long long firstIndex, long long lastIndex){
if(firstIndex > lastIndex)
return;
long long key = a[rand() % (lastIndex - firstIndex + 1) + firstIndex];
long long i = firstIndex, j = lastIndex;
while(i <= j){
while(a[i] < key)
i += 1;
while(a[j] > key)
j -= 1;
if(i <= j){
swap(a[i], a[j]);
i += 1;
j -= 1;
}
}
if(firstIndex < j)
quickSort(a, firstIndex, j);
if(i < lastIndex)
quickSort(a, i, lastIndex );
}

int main() {
long long n, k;
cin >> n >> k;

long long w[n];


long long m[n];

for (int i = 0; i < n; i++) {


cin >> w[i];
}

for (int i = 0; i < n; i++) {


cin >> m[i];
}

quickSort(w, 0, n - 1);
quickSort(m, 0, n - 1);

long long left = 0;


long long right = w[n-1] + m[n-1], result = 0;

while (left <= right)


{
long long mid = left + (right - left) / 2;
long long count = 0;
long long j = n - 1;

for (int i = 0; i < n; i++)


{
while (j >= 0 && w[i] + m[j] > mid)
{
j--;
}
count += (j + 1);
}

if (count >= k)
{
result = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}

cout << result << endl;

return 0;
}

You might also like