第一类:
只需要求长度最长的递增子串
//方法1:时间复杂度(O(n^2))
#include <iostream>
#include <algorithm>
#define MAXN 1000+5
using namespace std;
int a[MAXN],b[MAXN];
//a[i]表示输入的数组,b[i]表示到字符i的最长递增子串
int main()
{
int n,max;
int i,j;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
b[i]=1;
}
for(i=1;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
{
if(a[i]>a[j]&&b[j]>max)
max=b[j];
}
b[i]=max+1;
}
sort(b,b+n);
cout<<b[n-1]<<endl;
return 0;
}
//用到的知识:
//
1、动态规划,在第i个数计算时,与前面的数比较,
//
如果比前面的数大,就一定存在长度比它大1的子串。
//方法2:时间复杂度为(O(nlogn))
//用到的知识:
//
1、堆栈;
//
2、二分查找
第二种:
//需要输出最大递增子串的元素