最長上公升子串行 和 最長不下降子串行

2022-05-07 06:03:08 字數 1789 閱讀 5804

最長上公升子串行:是嚴格上公升的,alower_bound:返回序列中大於等於key值的第乙個數

比如說序列 1 2 3 4 5,key值為3,使用lower_bound返回第三個數

最長不下降子串行:不是嚴格上公升,可以存在多個數相等的情況,用upper_bound

upper_bound:返回序列中嚴格大於key值的第乙個數

比如說序列1 2 3 4 5,key值為3,使用upper_bound返回第四個數

hdu 1950 求最長上公升子串行

1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #include

9 #include10 #include11

using

namespace

std;

1213 typedef long

long

ll;14

const

int inf = (1

<<30)-1;15

const

int mod=1000000007;16

const

int maxn=1000005;17

18int

a[maxn],f[maxn];

19int

n;20

21int

main()36}

37 printf("

%d\n

",len);38}

39return0;

40 }

view code

hdu 5256

題意:給出乙個數列,a1,a2,a3,a4,---,an,現在需要修改盡量少的元素,使得這個序列嚴格遞增

因為:   a[i]又因為   a[i],a[i+1]都是整數

所以     a[i+1]-1>=a[i]

變形得   a[i+1]-(i+1)>=a[i]-i

令       b[i]=a[i]+1

所以可以求出b[i]的最長不下降子串行,再用n-len即為需要改變的最少的個數

學習的這一篇:

1 #include2 #include3 #include4 #include 5 #include6 #include7 #include8 #include

9 #include10 #include11

using

namespace

std;

1213 typedef long

long

ll;14

const

int inf = (1

<<30)-1;15

const

int mod=1000000007;16

const

int maxn=1000005;17

18int

a[maxn],f[maxn];

1920

intmain()

3132

int len=1

;33 f[1]=a[1

];34

for(int i=2;i<=n;i++)40}

41 printf("

case #%d:\n

",++kase);

42 printf("

%d\n

",n-len); 43}

44return0;

45 }

view code

最長上公升子串行,最長不下降子串行

最長上公升子串行 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 ret...

最長上公升 不下降子串行

最長上公升 不下降子串行 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...

Dp 最長上公升子串 最長上公升子串行

乙個數的子串bi,當b1 b2 bs的時候,我們稱這個子串是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串 ai1,ai2,aik 這裡1 i1 i2 ik n。如 對於序列 1,7,3,5,9,4,8 有它的一些上公升子串,如 1,7 3,5,9 等等。這些子串中最長...