zoukankan      html  css  js  c++  java
  • bzoj2501

    题解:

    显然,每当进入一个小的边界,那么我们的ans+1,出去一个大的边界,ans-1

    然后,我们将每一个边界排序,时间小的在前,大的在后

    每一次进来一个,如果是左边的边界,+1,右边的-1

    然后输出过程中最大的值

    对于左右边界重合,默认左边界在前(也可以右边界+1,然后右边界在前)

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200005;
    int n,a[N],f[N],b[N];
    int cmp(int x,int y)
    {
        return a[x]<a[y]||(a[x]==a[y]&&b[x]<b[y]);
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
         {
             scanf("%d%d",&a[i],&a[i+n]);
             a[i+n]++;b[i]=1;b[i+n]=-1;
         }
        for (int i=1;i<=2*n;i++)f[i]=i;
        sort(f+1,f+n+n+1,cmp);
        int ans=0,num=0;
        for (int i=1;i<=2*n;i++)
         {
             num+=b[f[i]];
             ans=max(ans,num);
         } 
        printf("%d
    ",ans); 
    }
  • 相关阅读:
    双反斜杠引发的正则表达式错误
    表单验证的前端验证后端验证
    html中的select下拉框
    hibernate需要注意的点
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8194521.html
Copyright © 2011-2022 走看看