天梯赛2 重现5-4 最长连续递增子序列
2016-07-11 23:37
357 查看
原题(20分)
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
10^5≤105);第2行给出nnn个整数,其间以空格分隔。
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数nnn(≤105\le10^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); }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Lua和C语言的交互详解
- C#获取网页源代码的方法
- LCL.VBS 病毒源代码
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方