[BZOJ1637][Usaco2007 Mar]Balanced Lineup

来源:互联网 发布:淘宝西台美妆是正品吗 编辑:程序博客网 时间:2024/05/13 19:22

原题地址

被这题卡了30+min…
方法略巧妙,不难发现[L,R]是平衡的,当且仅当[1,L-1]中两种牛数量之差=[1,R]中两种牛数量之差.
然后就简单了…

AC code:

#include <cstdio>#include <algorithm>using namespace std;const int N=50010;int n,ans;int h[N<<2];struct Data{    int t,x;    friend bool operator<(Data a,Data b){        return a.x<b.x;    }}d[N];int main(){    for(int i=0;i<(N<<2);i++) h[i]=-1;    scanf("%d",&n);    for(int i=1;i<=n;i++) scanf("%d%d",&d[i].t,&d[i].x);    sort(d+1,d+n+1);    for(int i=1,tmp=0;i<=n;i++){        if(d[i].t) tmp++;        else tmp--;        if(h[tmp+N]!=-1) ans=max(ans,d[i].x-d[h[tmp+N]+1].x);        else h[tmp+N]=i;    }    printf("%d\n",ans);    return 0;}
0 0
原创粉丝点击