挤牛奶

桶排的思想,数据太水,过了,还有正解排序维护一个区间,时刻更新,所以要赋初值,找到n+1否则不更新

#include<iostream>
#include<cstring>
using namespace std;
int f[2000000];
int max1=0,max2=0,max3=-9999999;
int n;
int flag,flag2;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        max3=max(max3,y);
        for(int i=x;i<=y;i++)
        {
        //h[i]=max(i-x,h[i]);
        //t[i]=max(y-i,t[i]);
        //dis[i]=max(dis[i],h[i]+t[i]);    
        f[i]=1;
        }

    }
    int z; 
    for(int i=0;i<=max3;i++) if(f[i]!=0){z=i;
        break;
    }
    int q=z;
    for(int i=z;i<=max3+1;i++)
    {
        if(f[i]==0&&flag==0)
        z=i,flag=1;
        else if(f[i]==1&&flag==1)
        {
            max1=max(max1,i-z+1);
            flag=0;
        }
    }
    for(int i=q;i<=max3+1;i++)
    {
        if(f[i]==1&&flag2==0)
        q=i,flag2=1;
        else if(f[i]==0&&flag2==1)
        {
            max2=max(max2,i-q-1);
            flag2=0;
        }
    }
    printf("%d %d",max2,max1);
}
原文地址:https://www.cnblogs.com/wspl98765/p/6819881.html