樹狀陣列 不好做的最長上公升子串行

2021-10-01 07:47:24 字數 913 閱讀 6107

乙個數的序列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)等等。這些子串行中最長的長度是4,比如子串行(1, 3, 5, 8).

你的任務,就是對於給定的序列,求出最長上公升子串行的長度。

輸入的第一行是序列的長度n (1 <= n <= 300000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到100000000之間。

最長上公升子串行的長度。

7

1 7 3 5 9 4 8

4
#include#includeusing namespace std;

struct num num[300010];

int n;

int lis[300010];

bool bigger(num a, num b)

else

}int lowbit(int x)

void update(int pos,int value)

}int query(int pos)

return temp;

}int main()

int ans = 0;

sort(num, num + n, bigger);

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

cout << ans << endl;

return 0;

}

樹狀陣列求LIS(最長上公升子串行)

優點 同樣是o nlogn 的複雜度 二分做法只能計算出當前序列的lis 而樹狀陣列可以計算出以每乙個a i 為結尾的lis 且二分的做法只能計算出答案,無法得到具體方案。做法 樹狀陣列維護字首max 設以a i 結尾的lis為f i 樹狀陣列的c x 存放以x為結尾的lis,注意這裡的x是乙個具體...

陣列的最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度,注意,並沒有連續的要求。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該...

最長上公升子串行

問題描述 乙個數的序列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 等等...