The term of this problem is the same as the previous one, the only exception — increased restrictions.
The first line contains two positive integers n and k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 109) — the number of ingredients and the number of grams of the magic powder.
The second line contains the sequence a1, a2, ..., an (1 ≤ ai ≤ 109), where the i-th number is equal to the number of grams of the i-th ingredient, needed to bake one cookie.
The third line contains the sequence b1, b2, ..., bn (1 ≤ bi ≤ 109), where the i-th number is equal to the number of grams of the i-th ingredient, which Apollinaria has.
Print the maximum number of cookies, which Apollinaria will be able to bake using the ingredients that she has and the magic powder.
1 1000000000 1 1000000000
2000000000
10 1 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1 1 1 1 1 1 1 1 1 1
0
3 1 2 1 4 11 3 16
4
4 3 4 3 5 6 11 12 14 20
3
题意:相似题
思路:如果能制作x块蛋糕,则一定能制作x-1,x-2块蛋糕
二分做蛋糕的数量
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 1000000000
using namespace std;
typedef long long ll;
ll a[100005],b[100005];
ll n,k;
int judge(ll x){ //判断能不能做成x个蛋糕
ll ans=k;
for(ll i=0;i<n;i++){
if(x>b[i]/a[i]){
if(ans<a[i]*x-b[i]) return 0;
else ans-=a[i]*x-b[i];
}
}
return 1;
}
int main(){
scanf("%lld%lld",&n,&k);
for(ll i=0;i<n;i++)
scanf("%lld",&a[i]);
for(ll i=0;i<n;i++)
scanf("%lld",&b[i]);
ll l=0,r=2*MAX+10;
ll cnt=0;
while(l<=r){ //二分做成的蛋糕数
ll mid=(l+r)/2;
if(judge(mid)) l=mid+1,cnt=mid;
else r=mid-1;
}
printf("%lld\n",cnt);
return 0;
}