• 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
  • 相关阅读:
    MySQL官方文档-二级索引覆盖主键索引
    windows server 2008/win7 远程控制
    博客园美化日记
    MarkDown 中使用 LaTeX 数学式
    DOS命令和bat脚本
    数据链路层
    网络安全
    运输层安全协议SSL
    DNS/域名
    停止等待协议
  • 原文地址:https://www.cnblogs.com/Asumi/p/9005811.html
Copyright © 2020-2023  润新知