POJ1631 最长上升子序列的新做法0(n)

来源:互联网 发布:淘宝权在哪个战队2017 编辑:程序博客网 时间:2024/06/03 02:30

2014/11/26


CF被虐了,新姿势赶紧学过来。题目不会做没关系的!没有谁是天生的神犇,可怕的是你下次遇到也不会做!

其实是试试 lower_bound能不能来做最长上升子序列,没想到真的可以。那单纯的复杂度就是 0(n)了。>.<

(百度搜题目的的时候各种 NlongN飘过。。haha)


#include<stdio.h>#include<string.h>#include<stack>#include<algorithm>#include<climits>using namespace std;int a[40005];int Max(int a,int b){return a>b?a:b;}int main(){int tot, n , x;while(~scanf("%d",&tot)){while(tot--){scanf("%d",&n);int maxn = 0;for(int i = 0;i < 40005; i++)    a[i] = INT_MAX;for(int i= 1;i <= n; i++){scanf("%d",&x);int y = lower_bound(a,a+40005,x) - a;a[y] = x;maxn = Max(maxn,y);}printf("%d\n",maxn+1);}}return 0;}



0 0
原创粉丝点击