zoukankan      html  css  js  c++  java
  • 最长上升子序列模板

    算法思想:失之东隅,收之桑隅

     对于一个序列,它正向最长上升子序列的长度就是它反向最长下降子序列的个数。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<stack>
     8 #include<deque>
     9 #include<iostream>
    10 using namespace std;
    11 typedef long long  LL;
    12 int con[30009];
    13 int dp[30009];
    14 int p;
    15 int Binary_search(int target)
    16 {
    17     int left=0,right=p;
    18     int index=0;
    19     while(left<=right)
    20     {
    21         int mid=(left+right)/2;
    22         if(dp[mid]<target)
    23             left=mid+1;
    24         else
    25         {
    26             right=mid-1;
    27             index=mid;
    28         }
    29     }
    30     return index;
    31 }
    32 int main()
    33 {
    34     int i,j;
    35     int n;
    36     p=0;
    37     scanf("%d",&n);
    38     for(i=0;i<n;i++)
    39         scanf("%d",&con[i]);
    40     dp[0]=con[0];
    41     for(i=1;i<n;i++)
    42     {
    43         if(con[i]>dp[p])
    44             dp[++p]=con[i];
    45         else
    46         {
    47             int mid=Binary_search(con[i]);
    48             dp[mid]=min(dp[mid],con[i]);
    49         }
    50     }
    51     printf("%d
    ",p+1);
    52     return 0;
    53 }
  • 相关阅读:
    Linux中断的系统调用
    线程的概念
    C++ 虚函数表浅析
    C++虚函数工作原理
    深入浅出单实例Singleton设计模式
    《角斗士》一个帝国的史诗绝唱
    《妖猫传》大唐盛世背后那些事
    程序员之路
    职业规划
    一些重要的算法
  • 原文地址:https://www.cnblogs.com/daybreaking/p/9451875.html
Copyright © 2011-2022 走看看