zoukankan      html  css  js  c++  java
  • Codeforces 479【F】div3

    题目链接:http://codeforces.com/problemset/problem/977/F

    题意:给你一串数字序列,让你求最长上升子序列,但是这个子序列呢,它的数字得逐渐连续挨着。

    题解:LIS的求法去做嘛。经典dp,处理的时候记录一下最大起点的下标,然后在最后循环找的时候,对比一下当前的值是否在逐渐+1即可。

    坑点大概就是会RE。QAQ就是开不下dp的数组了嘛。

     1 #include<iostream>
     2 #include<vector>
     3 #include<map>
     4 using namespace std;
     5 #define Max 1000005
     6 #define ll long long
     7 
     8 map <int,int> dp;
     9 ll num[Max];
    10 int main(){
    11     int n;
    12     cin>>n;
    13 
    14     for(int i = 0; i < n ;i++){
    15         cin>>num[i];
    16     }
    17     ll ans = -1;
    18     ll val = 0;
    19     for(int i = 0 ;i < n ;i++){
    20         dp[ num[i] ] = max(dp[ num[i] ], dp[ num[i] - 1] + 1);
    21         if(dp[ num[i] ]  > ans){
    22             ans = dp[ num[i] ];
    23             val = num[i];
    24         }
    25     }
    26     vector<int> res;
    27     int log = val - ans + 1;
    28     for(int i = 0 ;i < n ;i++){
    29         if(num[i] == log){
    30             res.push_back(i+1);
    31             log++;
    32         }
    33     }
    34     cout<<res.size()<<endl;
    35     for(int i = 0 ; i < res.size(); i++){
    36         cout<<res[i]<<" ";
    37     }
    38     
    39     
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    2020软件工程作业02
    第一次作业
    伪造IP
    Windows 上安装metasploit
    Kali安装 Typora
    在linux系统中安装调用汉语打字软件
    2020 年 10 月 10 日跑步随想
    最长公共前缀
    N皇后
    一道有趣的异步题
  • 原文地址:https://www.cnblogs.com/Asumi/p/9005811.html
Copyright © 2011-2022 走看看