天梯賽2 重現5-4 最長連續遞增子序列
阿新 • • 發佈:2018-12-24
原題(20分)
給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。
輸入格式:
輸入第1行給出正整數nnn(≤105\le 10^5≤105);第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); }