Language: C++

#include <iostream>
#include <vector>
#include <array>
#include <list>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <string>
#include <sstream>
#include <algorithm>
#include <random>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cmath>
#include <cassert>
#include <climits>
#include <bitset>
#include <functional>
#include <iomanip>

#define FOR_LT(i, beg, end) for (int i = beg; i < end; i++)
#define FOR_LE(i, beg, end) for (int i = beg; i <= end; i++)
#define FOR_DW(i, beg, end) for (int i = beg; end <= i; i--)

using namespace std;

bool is_ok(int64_t v, int64_t k, vector<int64_t>& as, vector<int64_t>& bs)
{
	int64_t kt = 0;

	FOR_LT(i, 0, as.size()) {
		int64_t r = (v / bs[i]);
		kt += max(0LL, as[i] - r);
	}

	return (kt <= k);
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int64_t n, k; cin >> n >> k;

	vector<int64_t> as(n);
	vector<int64_t> bs(n);

	for (auto& a : as) {
		cin >> a;
	}
	for (auto& b : bs) {
		cin >> b;
	}

	sort(as.begin(), as.end(), greater<int64_t>());
	sort(bs.begin(), bs.end());

	int64_t cmax = 0;
	FOR_LT(i, 0, n) {
		cmax = max(cmax, as[i] * bs[i]);
	}

	int64_t bottom = 0, up = cmax;
	while (true) {

		if (bottom == up) break;

		int64_t mid = (bottom + up) / 2;
		if (is_ok(mid, k, as, bs)) {
			if (mid == bottom) {
				up = mid;
			}
			else {
				up = mid;
			}
		}
		else {
			if (mid == bottom) {
				bottom++;
			}
			else {
				bottom = mid;
			}
		}
	}

	cout << bottom << endl;

	return 0;
}

Compiler output:
a.cc: In function 'bool is_ok(int64_t, int64_t, std::vector<long int>&, std::vector<long int>&)':
a.cc:38:26: error: no matching function for call to 'max(long long int, __gnu_cxx::__alloc_traits<std::allocator<long int>, long int>::value_type)'
   38 |                 kt += max(0LL, as[i] - r);
      |                       ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/14/string:51,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:38:26: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<long int>, long int>::value_type' {aka 'long int'})
   38 |                 kt += max(0LL, as[i] - r);
      |                       ~~~^~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61,
                 from a.cc:13:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:38:26: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   38 |                 kt += max(0LL, as[i] - r);
      |                       ~~~^~~~~~~~~~~~~~~~