您的位置:首页 > 其它

南阳理工OJ 单调递增子序列(二)

2017-10-07 21:35 246 查看

单调递增子序列(二)

时间限制:1000 ms  |  内存限制:65535 KB

难度:4

描述
给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序列,并求出其长度。

如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。

输入有多组测试数据(<=7)

每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的下一行里有n个整数,表示数列中的所有元素.每个整形数中间用空格间隔开(0<n<=100000)。

数据以EOF结束 。

输入数据保证合法(全为int型整数)!输出对于每组测试数据输出整形数列的最长递增子序列的长度,每个输出占一行。样例输入
7
1 9 10 5 11 2 13
2
2 -1

样例输出
5
1

来源[521521]改编上传者
ACM_赵铭浩

思路:

用到STL中lower_bound

从一开始

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f

int s[100005];

int main()
{
int n;
cin.sync_with_stdio(false);
while(cin>>n)
{
memset(s,-INF,sizeof(s));
int len=0;
for(int i=0;i<n;i++)
{
int k;
cin>>k;
int f=lower_bound(s+1,s+len+1,k)-s;
s[f]=k;
if(f>len)
len=f;
}
cout<<len<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM STL lower_bound