#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1<<19;
int a[N], b[N];
vector<pair<int,int>> vec;
bool Poss(int n, int m, int mn, int extra = 0){
for (auto [vl, id] : vec){
int v1 = (mn + a[id] - 1) / a[id], v2 = (mn - m * a[id] + b[id] - 1) / b[id];
if (v1 <= m)
extra += m - v1;
else if (v2 <= extra)
extra -= v2;
else
return 0;
}
return 1;
}
signed main(){
int n, m;
cin>>n>>m;
for (int i=1;i<=n;i++)
cin>>a[i];
for (int i=1;i<=n;i++){
cin>>b[i];
a[i] = max(a[i], b[i]);
vec.push_back({a[i], i});
}
sort(rbegin(vec), rend(vec));
int l = 0, r = 1.1e18;
while (l + 1 < r){
int mid = (l + r) / 2;
if (Poss(n, m, mid))
l = mid;
else
r = mid;
}
cout<<l<<endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |