AcWing 4956. 冶炼金属
原题链接
简单
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
//二分:需求: 查找左边界,
int get(int a,int b)
{
int l=1;
int r=1e9+1;//最大值要取大一点
while(l<r)
{
int mid=l+r>>1;
if(a/mid<=b)r=mid;
else l=mid+1;
}
return r;
}
//a/v=b v=[1,1e9]
int main()
{
int n;
scanf("%d",&n);
int v_min=1;//最小值
int v_max=1e9+5;//最大值,直接不需要思考那么多,最大的多开就行
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
//二分,<=b,>b具有二段性,求大于等于b的第一个值,求大于等于b-1的第一个值
v_min=max(v_min,get(a,b));//区间的最大值,标准值是1,该函数是单调递减分段函数
v_max=min(v_max,get(a,b-1)-1);//区间内的最小值,标准值是1e9
}
printf("%d %d",v_min,v_max);
}