最長上公升子串行
#include#includeusing namespace std;
const
int n=23333+12;
int dp[n],a[n];
int n;
int binarysearch(int k,int
len)
else
if(k>dp[mid])
else
mid=(l+r)>>1;
}return l;
}int main()
dp[1]=a[0];
len=1;
for(int i=1;iint t=binarysearch(a[i],len);
dp[t]=a[i];
if(t>len)
}printf("%d\n",len);
}
最長不下降子串行
#include#includeusing namespace std;
const
int n=23333+10;
int dp[n],a[n];
int binarysearch(int k,int
len) else
}return l;
}int main()
len=0;
for(int i=0;iint t=binarysearch(a[i],len);
if(t>=len) len++;
dp[t]=a[i];
}printf("%d\n",len);
}
其實只要把這個條件改一下,就可以變成最長上公升子串行,但是我習慣了第一種寫法,所以寫出兩種記錄一下,第一種寫法本來就改一下條件就行了的,可能是二分沒寫好,有些極端情況,導致有的題目只過了98的資料 最長上公升 不下降子串行
最長上公升 不下降子串行 lis 有兩種方法 1.動態規劃,o n 2 容易得出o n 2 的dp遞推公式 d i max 1 1 j d i 為以元素i結尾的最長子序列個數。這樣經過兩重迴圈一次遍歷可以得到最長上公升子串行。view code 1 include 2 include 3 inclu...
最長上公升子串行 和 最長不下降子串行
最長上公升子串行 是嚴格上公升的,alower bound 返回序列中大於等於key值的第乙個數 比如說序列 1 2 3 4 5,key值為3,使用lower bound返回第三個數 最長不下降子串行 不是嚴格上公升,可以存在多個數相等的情況,用upper bound upper bound 返回序...
最長不下降子串行
a1 t0 an a an 1 2 b an c d n 1 求該序列最長不下降子串行長度 n不是很大顯然可以暴力。n很大呢?那就不斷減迴圈節長度直至減到乙個閾值內,再暴力。正確性顯然,只要閾值不要設太小。include include include define fo i,a,b for i a...