利用O(nlogn)的LIS的思路題

2021-07-15 21:03:41 字數 747 閱讀 5432

題意:t組資料,每組資料是長度為n的陣列,其中0可以換為任意的整數(可以使複數)問這個陣列的最長上公升子串行(嚴格上公升)

思路:我們發現在選擇的子串行左側和右側的每個0都能使得整個陣列的長度增加1,但如果零實在選擇的序列的中間時則取決於兩個數字的value差與零的個數如1 2 0 0 3,1 2 0 0 3 4 5 6.我們發現無論什麼情況算零都是合理的,把零算在最長子序列中會影響原來得到的序列。

那麼題解來了,只要統計每個位置的數字之前零的個數,將該數字減去零的個數。然後用nlogn的演算法求最長上公升子串行,最後再加上所有零的個數

減去零的個數的意思就是把其前面所有的零算上得到的結果

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

int a[100005];

bool idx[100005];

int lis[100005];

int main()

a[i] -= znum;

}int p;

int len = 0;

for(int i = 0; i < n; i ++)

printf("case #%d: %d\n",t,len + znum);

}return 0;

}

覆蓋SEH的溢位利用檢測思路

kruglinski kruglinski at sohu.com 看到安焦上的一篇 基於棧指紋檢測緩衝區溢位的一點思路 這是在shellcode已經執行時在它的呼叫堆疊 被hook的下級呼叫函式 loadlibrary 裡進行檢測,有些利用溢位覆蓋seh handler,然後任程式執行,因為溢位破...

LIS問題的簡短

飛彈攔截 時間複雜度o nlogn 求最長上公升子串行時 dp p p代表最長不上公升子串行的子串行的編號從1開始增加,根據dw定理,最大的m編號即是最長上公升子串行的長度也是最少分成了m組非上公升子串行。include using namespace std int a 100010 dp1 10...

利用貪心思路求擺動序列的長度

題目鏈結 如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差 如果存在的話 可能是正數或負數。少於兩個元素的序列也是擺動序列。例如,1,7,4,9,2,5 是乙個擺動序列,因為差值 6,3,5,7,3 是正負交替出現的。相反,1,4,7,2,5 和 1,7,4,5,5 ...