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
题意:http://www.cnblogs.com/hsd-/p/5464525.html
(补)直通D1 数据范围变大
题解:二分处理
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define ll __int64 5 using namespace std; 6 ll n,k; 7 ll a[100005]; 8 ll b[100005]; 9 ll gg; 10 bool check(ll x) 11 { 12 ll gg=k; 13 for(int i=1;i<=n;i++) 14 { 15 if((x*a[i])>b[i]) 16 { 17 ll cha=x*a[i]-b[i]; 18 gg=gg-cha; 19 } 20 if(gg<0) 21 return false; 22 } 23 return true; 24 } 25 int main () 26 { 27 scanf("%I64d %I64d",&n,&k); 28 ll gg=0; 29 for(int i=1;i<=n;i++) 30 scanf("%I64d",&a[i]); 31 for(int i=1;i<=n;i++) 32 scanf("%I64d",&b[i]); 33 ll l=0,r=2000000000,mid; 34 while(l<r) 35 { 36 //cout<<l<<" "<<r<<endl; 37 mid=(l+r+1)>>1; 38 if(check(mid)) 39 l=mid; 40 else 41 r=mid-1; 42 } 43 cout<<l<<endl; 44 return 0; 45 }