zoukankan      html  css  js  c++  java
  • CF977F Consecutive Subsequence (stl)

    这道题乍一看是最长上升子序列(其实也是)

    但是这里要求是+1的最长上升子序列,我们自然想到由dp[a[i]-1]+1转移过来。但是很坑的是这个数据很大

    有1e9,我当时还以为有什么精妙的解法,没想到是利用map进行映射。既然数组存不下,那就用存的下的去存

    只要遍历map找到最大的,之后倒着枚举就行了。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<map>
    #include<algorithm>
    #include<queue>
    #define ull unsigned long long
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=5e5+10;
    const int mod=1e9;
    map<int,int> m1;
    int a[N];
    int main(){
        int n;
        cin>>n;
        int i;
        for(i=1;i<=n;i++){
            scanf("%d",&a[i]);
            m1[a[i]]=max(m1[a[i]],m1[a[i]-1]+1);
        }
        int res=0;
        int id=0;
        for(auto it : m1){
            if(it.second>res){
                res=it.second;
                id=it.first;
            }
        }
        vector<int> num;
        for(i=n;i>=1;i--){
            if(id==a[i]){
                num.push_back(i);
                id--;
            }
        }
        cout<<num.size()<<endl;
        for(i=(int)num.size()-1;i>=0;i--){
            cout<<num[i]<<" ";
        }
        cout<<endl;
    }
    View Code
  • 相关阅读:
    Alpha版使用说明
    团队绩效评估计划
    丹佛机场行李处理系统分析
    第一个Spring冲刺周期团队进展报告
    用户体验
    总结
    Beta版
    Alpha版使用说明书
    5-26课堂作业——组员投票Alpha版存在的问题
    冲刺周期二--站立会议07
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12629113.html
Copyright © 2011-2022 走看看