zoukankan      html  css  js  c++  java
  • BZOJ 1637 [Usaco2007 Mar]Balanced Lineup

    【题解】

      套路题。。其实也很好想。。

      把id为0的当成id为-1的,然后求前缀和,这样-1和1就可以相互抵消。也就是如果sum[i]=sum[j],那么x[i]-x[j+1]就是一个合法的答案。我们用first[i]记录满足sum[j]=i的j里面a[j+1]的最小值。

      

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define N 200010
     4 #define rg register
     5 using namespace std;
     6 int n,b[N],s[N],ans,f[N];
     7 struct rec{
     8     int id,x;
     9 }a[N];
    10 inline int read(){
    11     int k=0,f=1; char c=getchar();
    12     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    13     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    14     return k*f;
    15 }
    16 inline bool cmp(rec a,rec b){return a.x<b.x;}
    17 int main(){
    18     n=read();
    19     for(rg int i=1;i<=n;i++) a[i].id=read(),a[i].x=read();
    20     sort(a+1,a+1+n,cmp);
    21     for(rg int i=1;i<=n;i++) s[i]=s[i-1]+(!a[i].id?-1:1);
    22     for(rg int i=1;i<=n;i++) if(f[s[i]]) ans=max(ans,a[i].x-f[s[i]]); else f[s[i]]=a[i+1].x;
    23     printf("%d
    ",ans);
    24     return 0;
    25 } 
    View Code

      

  • 相关阅读:
    观察者模式
    如何通过反射创建对象?
    java8新特性
    idea 常用快捷键--标蓝
    java多线程基础篇-01
    zookeeper单机版及操作
    redis和jedis常用api
    Mac连接服务器
    redis基本介绍及安装01
    docker 安装mobsf及部分命令01
  • 原文地址:https://www.cnblogs.com/DriverLao/p/8879521.html
Copyright © 2011-2022 走看看