1. 程式人生 > >天梯賽2 重現5-4 最長連續遞增子序列

天梯賽2 重現5-4 最長連續遞增子序列

原題(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);
}