PTA 最长连续递增子序列

来源:互联网 发布:术大师淘宝论坛 编辑:程序博客网 时间:2024/05/20 16:32

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

输入格式:

输入第1行给出正整数nn\le 10^5105);第2行给出nn个整数,其间以空格分隔。

输出格式:

在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

输入样例:

151 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:

3 4 6 8


解题思路:若一个数字比它前一个数字大,则长度加一,若长度大于最大长度,则更新最大长度,并标记下位置

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <vector>#include <set>#include <stack>#include <map>#include <climits>using namespace std;#define LL long longconst int INF=0x3f3f3f3f;int a[100005];int main(){    int n;    while(~scanf("%d",&n))    {        int k=1,ma=1,cnt=1;        for(int i=1; i<=n; i++)            scanf("%d",&a[i]);        for(int i=2; i<=n; i++)        {            if(a[i]>a[i-1]) cnt++;            else            {                if(ma<cnt)                {                    ma=cnt;                    k=i-1;                }                cnt=1;            }        }        if(ma<cnt) ma=cnt,k=n;        printf("%d",a[k-ma+1]);        for(int i=k-ma+2; i<=k; i++) printf(" %d",a[i]);        printf("\n");    }    return 0;}

0 0
原创粉丝点击