最长上升子序列~

来源:互联网 发布:php抓取教务处成绩 编辑:程序博客网 时间:2024/06/14 20:30
/*arr数组是你自己输入的值 n从1开始输入ans数组申明出来就可以了,初始化0*///int Search(int num,int low,int high){  //    int mid;  //    while(low <= high)//    {  //        mid = (low + high) >> 1;  //        if(num >= ans[mid]) low = mid + 1;    //关键,可修改此处为最长上升子序列//        else high = mid - 1;//    }  //    return low;  //} int DP(int n){    ans[1] = arr[1];    int len = 1;    for (int i = 2; i <= n; i++)    {        if (arr[i] >= ans[len])        {            len = len + 1;            ans[len] = arr[i];        }        else        {        //  int pos = Search(arr[i],1,len);            int pos = upper_bound(ans,ans + len,arr[i]) - ans; //最长不下降子序列,lower为最长上升子序列            ans[pos] = arr[i];        }    }    return len;

这个模板的复杂度比正常的最长上升子序列低(来自-kuangbin的模板)

0 0