題目大意:
給定一個長度為n的整數序列,求一個最長子序列(不一定為連續),使得該序列的長度為奇數2*k+1,前k+1個數嚴格遞增,後k+1個數嚴格遞減。(嚴格遞增/遞減意味著相鄰兩個數不能相同)
思路:
可以求兩次LIS(最長上升子序列),一次是遞增的,一次是遞減的(其實就是倒著求遞增的)
n高達10000,因此LIS要用二分查找來優化時間復雜度為O(nlogn)
#include#include #include using namespace std; const int MAXN=10000+10; const int INF=0x7fffffff; int data[MAXN],d1[MAXN],g1[MAXN],d2[MAXN],g2[MAXN]; int search(int L,int R,int x,int *g) { while(L