美文网首页
(MAP/递推)Consecutive Subsequence

(MAP/递推)Consecutive Subsequence

作者: laochonger | 来源:发表于2018-08-02 20:01 被阅读0次

    题意:找出最长上升连续子序列(5,6,7,8...)
    题解:直接用一个map映射每一个的值,递推计算出以每个值为结尾的序列长度,另外有很多map是未初始化的,大概在cf上都默认为0;
    一开始用了O(n^2)的LIS改了条件保存路径输出,TLE了,后来用了排序递推,WA了

    #include <bits/stdc++.h>
    using namespace std;
    int arr[200100],N,r,k,last,t,i;
    map<int,int> m;
    int main(){
        for(cin>>N; i<N ; i++){cin>>arr[i];
            r=m[arr[i]]=m[arr[i]-1]+1;//r=该值=上值-1 
            if(r>k) k=r, last=arr[i];//最大值为下标为r,最大值为last 
        }
        for(cout<<k<<endl, t=last-k+1, i=0 ; i<N ; i++)  //分别找到last-k+1~last的一个下标 
            if(arr[i]==t) cout<<i+1<<" ", t++;
    }
    

    相关文章

      网友评论

          本文标题:(MAP/递推)Consecutive Subsequence

          本文链接:https://www.haomeiwen.com/subject/esgsvftx.html