题目描述
给定一个序列 An = a1 ,a2 , ... , an ,找出最长的子序列使得对所有 i < j ,ai < aj 。求出这个子序列的长度
输入描述:
输入的序列
输出描述:
最长递增子序列的长度
示例1
输入
复制
1 -1 2 -2 3 -3 4
输出
复制
4
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INT_MAX = 1e5+5;
int Input[INT_MAX];
int DP[INT_MAX];
int Index = 0;
int main(){
while(scanf("%d",&Input[Index]) != EOF){
Index++;
}
for(int i = 0;i < Index;i ++){
DP[i] = INT_MAX;
}
for(int i = 0;i < Index;i ++){
*lower_bound(DP,DP + Index,Input[i]) = Input[i];
}
auto it = lower_bound(DP,DP + Index,INT_MAX);
cout << it - DP << endl;
return 0;
}
标签:Index,int,MAX,递增,INT,序列,最长,DP From: https://blog.51cto.com/u_13121994/5798281