第五维度
二分
思路:看到题目是尽可能晚的情况下最早就应该想到贪心。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005],b[100005];
ll n,m;
bool check(ll t)
{
ll res=0,big=0;
for(ll i=0;i<n;i++)
{
if(a[i]>=t) continue;
ll x=(t-a[i])*b[i];
res+=x;
big=max(big,x);
}
res-=big;
if(res>=m) return 1;
return 0;
}
int main()
{
cin>>n>>m;
ll late=0;
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
late=max(late,a[i]);
}
//最晚可以完成的时间就是最晚出发的时间加上最小步长1积累m需要的时间
ll t,l=0,r=late+m;
while(l<=r)
{
t=(l+r)/2;
if(check(t)) r=t-1;
else l=t+1;
}
if(r==late+m) cout<<-1<<endl;
else cout<<r+1<<endl;
return 0;
}