您的位置:首页 > 其它

51nod--1134 最长递增子序列

2017-09-19 18:18 239 查看
题目链接:

        http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

#define Min -1e9
#define MAX 50010

int a[MAX];
int vis[MAX];

int main()
{
int n,len=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
vis[i]=Min;
vis[len]=a[1];
for(int i=2;i<=n;i++)
{
if(vis[len]<a[i])
vis[++len]=a[i];
else
{
int pos=upper_bound(vis+1,vis+len,a[i])-vis;//C++ upper_bound(first,last,val) 指向[first , last)中第一个>val的元素;
vis[pos]=a[i];
}
}
// for(int i=1;i<=len;i++)
// cout<<vis[i]<<" ";
// cout<<endl;
cout<<len<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: