【codevs 2744】养鱼喂妹纸

来源:互联网 发布:java技术架构图工具 编辑:程序博客网 时间:2024/04/28 19:52

二分答案+贪心
注意二分边界啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊QAQQQQQQQQQQQQQQQQQQQQQ

#include<cstdio>#include<iostream>#define ll long long#define MAXN 100005using namespace std;ll a[MAXN],b1[MAXN],b[MAXN],maxx;int n;bool check(ll mid){    for(int i=1;i<=n;i++) b1[i]=b[i];    for(int i=1;i<n;i++)    {        if(b1[i]==mid) continue;        if(b1[i]<mid) //l<---r        {            ll tmp=mid-b1[i];            ll road=a[i+1]-a[i];            b1[i+1]-=tmp;            b1[i+1]-=road;        }        else        {            ll tmp=b1[i]-mid;            ll road=a[i+1]-a[i];            if(tmp<=road) b1[i]=mid;            else             {                b1[i]=mid;                b1[i+1]+=tmp-road;            }        }    }    return b1[n]>=mid;}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d%d",&a[i],&b[i]);        maxx=max(maxx,b[i]);    }    ll l=1,r=maxx,mid;    while(l<=r)    {        mid=(l+r)>>1;        if(check(mid)) l=mid+1;        else r=mid-1;    }    cout<<r<<endl;    return 0;}