第五维度
二分
思路:看到题目是尽可能晚的情况下最早就应该想到贪心。
#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;
}