1. 程式人生 > >5-3 最長連續遞增子序列 (20分)

5-3 最長連續遞增子序列 (20分)

5-3 最長連續遞增子序列   (20分)

給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。

輸入格式:

輸入第1行給出正整數nnn≤105\le 10^5105);第2行給出nnn個整數,其間以空格分隔。

輸出格式:

在一行中輸出第一次出現的最長連續遞增子序列,數字之間用空格分隔,序列結尾不能有多餘空格。

輸入樣例:

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

輸出樣例:

3 4 6 8

#include<stdio.h>
#include<string.h>
struct node
{
    int b;
    int k;
    int m;
} s[100010] ;
int main()
{
    int i, j;
    int n;
    int maxi = 1, c;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &s[i].b);
    }

    for (i = 0; i < n; i++)
    {
        s[i].k = 1;
    }
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (s[j].b > s[j - 1].b)
            {
                s[i].k++;

            }
            else
            {
                break;
            }

        }
    }
    /*for(i=0;i<n;i++)
             printf("%d",s[i].k);*/
    for (i = 0; i < n; i++)
    {
        if (s[i].k > maxi)
        {
            maxi = s[i].k;
            c = i;
        }
    }
    //printf("%d %d\n", c, maxi);
    for (i = c; i < c + maxi-1; i++)
    {
        printf("%d ", s[i].b);
    }
    printf("%d\n", s[c+maxi-1].b);
}