#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int x[1000005];
int base[1000005];
struct node{
int z,x,base;
};
node z[1000005];
bool cmp(node a,node b){
return a.base>b.base;
}
bool check(int mid){
int remain=0;
for (int i=1;i<=a;i++){
if (z[i].base>=mid){
int sl=mid/max(z[i].x,z[i].z) +(mid%max(z[i].z,z[i].x)!=0);
remain+= b-sl;
}else{
int req=(mid-z[i].base)/z[i].x + ((mid-z[i].base)%z[i].x!=0);
if (req>remain){
return false;
}
remain-=req;
}
}
return true;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> b;
for (int i=1;i<=a;i++){
cin >> z[i].z;
}
for (int i=1;i<=a;i++){
cin >> z[i].x;
}
for (int i=1;i<=a;i++){
z[i].base=max(z[i].x,z[i].z)*b;
}
sort(z+1,z+1+a,cmp);
int l=1;
int r=1e18;
int pos=0;
while (l<=r){
int mid=(l+r)/2;
if (check(mid)){
pos=mid;
l=mid+1;
}else{
r=mid-1;
}
}
cout << pos << "\n";
return 0;
}
# | 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... |