lis最长上升子序列 (kuangbin nlogn)

 1 int arr[maxn],ans[maxn],len,n;
 2 
 3 void get_lis()
 4 {
 5     ///ans为序列数组
 6     ans[1] = arr[1];
 7     len=1;
 8     for(int i=2; i<=n; ++i){
 9         if(arr[i]>ans[len])///严格上升
10             ans[++len]=arr[i];
11         else{
12             int pos=lower_bound(ans,ans+len,arr[i])-ans;
13             ans[pos] = arr[i];
14         }
15     }
16 }
17 
18 int get_lis(int arr[maxn])
19 {
20     ///ans为序列数组
21     ans[1] = arr[1];
22     len=1;
23     for(int i=2; i<=n; ++i){
24         if(arr[i]>ans[len])///严格上升
25             ans[++len]=arr[i];
26         else{
27             int pos=lower_bound(ans,ans+len,arr[i])-ans;
28             ans[pos] = arr[i];
29         }
30     }
31     return len;
32 }

 

posted @ 2017-09-11 17:41  啦啦啦天啦噜  阅读(307)  评论(0编辑  收藏  举报