zoukankan      html  css  js  c++  java
  • Codeforces 931F

    931F - Teodor is not a liar!

    思路:

    最长上升子序列

    先差分数组染色

    如果存在一个点,被所有区间包含,那么这张图一定是山峰状,如下图:

    那么只要分别从前和从后找一个最长非严格上升子序列,然后从前往后更新就可以找出最大的山峰序列的长度,这个就是答案

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int N=1e5+5;
    const int INF=0x3f3f3f3f;
    int a[N],dp[N],pre[N],suf[N];
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        int n,m,l,r;
        cin>>n>>m;
        for(int i=1;i<=n;i++)cin>>l>>r,a[l]++,a[r+1]--;
        for(int i=2;i<=m;i++)a[i]+=a[i-1];
        mem(dp,INF);
        for(int i=1;i<=m;i++){
            *upper_bound(dp+1,dp+m+1,a[i])=a[i];
            pre[i]=lower_bound(dp+1,dp+m+1,INF)-dp-1;
        }
        mem(dp,INF);
        for(int i=m;i>=1;i--){
            *upper_bound(dp+1,dp+m+1,a[i])=a[i];
            suf[i]=lower_bound(dp+1,dp+m+1,INF)-dp-1;
        }
        int ans=0;
        for(int i=0;i<=m;i++)ans=max(ans,pre[i]+suf[i+1]);
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    WEEK
    更新yum源
    Centos6.9安装Mysql5.7.18
    gitlab使用
    gitlab安装
    git客户端
    服务器端配置
    错误问题
    服务器端
    01找出数组中重复的数
  • 原文地址:https://www.cnblogs.com/widsom/p/8515181.html
Copyright © 2011-2022 走看看