利用dp+二分查詢依次找出最長遞增子串行和最長遞減子串行,取二者中較大值。
如果結果 ans>=n-k 那麼這樣的序列滿足條件是乙個魔法陣列。
#include #include #include #include #include #include using namespace std;
#define int 0x7fffffff
int main()
for(i = 0; i < n; i++)
//發現遞增資料進棧
else
//while
a[low]=arr[i];
}//else
if(arr[i]>a1[top2])
//發現遞增資料進棧
else
//while
a1[low]=arr[i];
}//else
}//for
int ans = top1 > top2 ? top1 : top2;
if(ans >= n-k) printf("a is a magic array.\n");
else printf("a is not a magic array.\n");
}//while
//system("pause");
return 0;
}
//其它模板
#include#includeconst int maxn=200001;
int a[maxn];
int d[maxn];
int main()
}printf("%d\n",len);
return 0;
}
int stack[10010];
int lis(int arr,int n)
stack[low] = arr[i];
} }
return top;
}
hdu6197 最長上公升子串行(LIS)長度
給你t組樣例,每組樣例給出n 1e5 k n 再給你n個數組成的序列。問你能不能通過減去該序列中x k 個數,使該序列變成乙個非遞增或非遞減序列。可以輸出a is a magic array.不行就輸出a is not a magic array.這題可以轉化成最長上公升子串行的題。我們正著做一遍最...
最長有序子串行
acm模版 遞增 預設 遞減 非遞增 非遞減 1 2 3 const int maxn 1001 int a maxn f maxn d maxn d i 用於記錄 a 0.i 以 a i 結尾的最大長度 int bsearch const int f,int size,const int a el...
D 最長上公升子串行
乙個數的序列 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,4,8 等等。這些...