最长连续递增子序列
2017-10-28 11:59
316 查看
自己写的:
同学写的:
#include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<queue> #include<stack> using namespace std; struct { int fir; int ed; int cnt; }mymax;//记录最长子序列的相关信息 long long a[1e5+10];//开个大数组,(*^__^*) int main(){ int fir=0;//临时的起点,初始化为0 mymax.fir=0;//最长子序列的起点也初始化为0 mymax.cnt=0; int cnt=1;//临时序列长度 int N; cin >> N; mymax.ed=N-1;//顺序的情况,就全部输出 if(N>0)//保持代码鲁棒性,O(∩_∩)O哈哈~ cin >> a[0]; for(int i=1;i<N;i++){ scanf("%lld",&a[i]); if(a[i]>a[i-1])//比前一个大,长度加一 cnt++; else{ if(mymax.cnt<cnt){//比前一个小,此序列到此为止,如果为最长的要大就更新最长子序列 mymax.cnt=cnt; mymax.fir=fir; mymax.ed=i-1; } cnt=1; fir=i;//下一次从i开始 } } for(int i=mymax.fir;i<=mymax.ed;i++){ cout << a[i]; if(i<mymax.ed) putchar(' '); } return 0; }
同学写的:
#include<stdio.h> const int MAXN = 1e5+10; int a[MAXN]; int dp[MAXN]; int main(void){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } dp[0]=1; for(int i=1;i<n;i++){ if(a[i]>a[i-1]){ dp[i]=dp[i-1]+1; }else{ dp[i]=1; } } int ans=0,flag; for(int i=0;i<n;i++){ if(ans<dp[i]){ ans=dp[i]; flag=i; } } for(int i=flag-dp[flag]+1;i<=fl 4000 ag;i++){ if(i==flag){ printf("%d\n",a[i]); }else{ printf("%d ",a[i]); } } return 0; }
相关文章推荐
- 最长连续递增子序列
- 最长连续递增子序列
- 最长连续递增子序列
- 线段树区间合并+最长连续递增子序列——HDU 3308
- HDU 3308——LCIS(线段树,区间合并,最长连续递增子序列)
- 最长连续递增子序列
- 5-2 最长连续递增子序列
- 天梯赛2 重现5-4 最长连续递增子序列
- 最长连续递增子序列
- 最长连续递增子序列
- [LintCode] Longest Increasing Continuous Subsequence 最长连续递增子序列
- 求数组中最长连续递增子序列
- 用二分法寻找最长连续单调递增子序列
- 最长单调"连续"递增子序列
- 51Nod - 1241 特殊的排序(求最长连续递增子序列)
- 5-1 最长连续递增子序列
- 矩阵中最长连续递增子序列
- 最长连续递增子序列
- 习题3.4 最长连续递增子序列
- 最长连续递增子序列