乙個數的序列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之間。
最長上公升子串行的長度。
71 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 等等...