Codevs 3955 最长严格上升子序列(加强版)
2016-09-12 13:33
197 查看
提交地点
思路很重要是不是
lower_bound大家见识过吧,我傻呗,打了一个stl
这个就是满满地套路题了
普通的N^2算法不行
就是类似贪心地东西
如果插入一个数可以形成最长上升之序列,插入
如果不能的话找一个比他大地第一个数
然后用这个数替换Ta
这个就可以让以后插入更多的东东……
题目描述 Description
给一个数组a1, a2 … an,找到最长的上升降子序列ab1< ab2 < .. < abk,其中b1< b2< .. bk。输出长度即可。
输入描述 Input Description
第一行,一个整数N。
第二行 ,N个整数(N < = 1000000)
输出描述 Output Description
输出K的极大值,即最长不下降子序列的长度
样例输入 Sample Input
5
9 3 6 2 7
样例输出 Sample Output
3
思路很重要是不是
lower_bound大家见识过吧,我傻呗,打了一个stl
这个就是满满地套路题了
普通的N^2算法不行
就是类似贪心地东西
如果插入一个数可以形成最长上升之序列,插入
如果不能的话找一个比他大地第一个数
然后用这个数替换Ta
这个就可以让以后插入更多的东东……
题目描述 Description
给一个数组a1, a2 … an,找到最长的上升降子序列ab1< ab2 < .. < abk,其中b1< b2< .. bk。输出长度即可。
输入描述 Input Description
第一行,一个整数N。
第二行 ,N个整数(N < = 1000000)
输出描述 Output Description
输出K的极大值,即最长不下降子序列的长度
样例输入 Sample Input
5
9 3 6 2 7
样例输出 Sample Output
3
#include<set> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; multiset<int> x; multiset<int>::iterator it; int n,tmp,k; int main(){ scanf("%d",&n); x.clear(); scanf("%d",&tmp);x.insert(tmp); for(int i=2;i<=n;i++){ scanf("%d",&tmp); it=x.end();it--; if(tmp>*it)x.insert(tmp); else{ it=x.lower_bound(tmp); k=*it;x.erase(k); x.insert(tmp); } } printf("%d\n",x.size()); }
相关文章推荐
- CODEVS【3955】最长严格上升子序列(加强版)
- 【codevs 3955】最长严格上升子序列(加强版)
- Codevs 3955 最长严格上升子序列(加强版) dp (nlogn做法)
- Codevs 3955 最长严格上升子序列(加强版)
- CODE[VS] 3955 最长严格上升子序列(加强版)
- 【codevs 3995】最长严格上升子序列(加强版)
- [CODEVS3955]最长严格上升子序列(加强版)
- 【codevs 3995】最长严格上升子序列(加强版)
- 【CodeVS3955】最长严格上升子序列(加强版)
- codevs 3955 最长严格上升子序列(加强版)
- codevs 3955 最长严格上升子序列(加强版)
- code【vs】3955 最长严格上升子序列(加强版)
- codevs 3955 最长严格上升子序列(加强版)(DP)
- [CODEVS] 3955 最长严格上升子序列(加强版)
- CODE[VS] 3955 最长严格上升子序列(加强版)
- 【基础练习】【二分】codevs3955 最长严格上升子序列(加强版)题解
- 3955 最长严格上升子序列(加强版)
- 【codevs3955】最长严格上升子序列(加强版)
- 3955 最长严格上升子序列(加强版)
- Codevs P3955 最长严格上升子序列(加强版)(nlogn求法)