poj-3903 Stock Exchang O(N*logN)

来源:互联网 发布:windows to go 认证u盘 编辑:程序博客网 时间:2024/06/12 20:00

题目来源:http://poj.org/problem?id=3903

睡前水题一道  O(N*logN) 最长上升子序列

#include <iostream>#include <cstdio>#include <cstring>#define MAXN 100010using namespace std;long long a[MAXN],b[MAXN];int sum=1,n;void find(int x){    int l=0,r=sum-1;    int mid=(l+r)/2;    while(l!=r)    {        if(b[mid]<x)  {l=mid+1;mid=(l+r)/2;}         else {r=mid;mid=(l+r)/2;}    }    b[l]=x;}void solve(){    for(int i=1; i<n; i++)    {        if(a[i]>b[sum-1]) {b[sum]=a[i];sum++;}        else          find(a[i]);    }}int main(){    while(~scanf("%d",&n))    {        for(int i=0; i<n; i++)            scanf("%lld",&a[i]);        b[0]=a[0];        solve();        printf("%d\n",sum);        sum=1;    }}