LIS 樹狀陣列優化

2022-08-20 12:45:13 字數 715 閱讀 5567

lis  即最長上公升子串行

可以用dp求解 複雜度o(n^2) 

我們考慮優化 用樹狀陣列(或者線段樹)

樹狀陣列維護區間最大值

(省去原始o(n^2)演算法中的查詢)

這樣還能求出以i結尾的lis

二分只能求出當前序列的lis 

(許多題裡要求lis個數什麼的qwq 總之比二分方便 除了碼量長)

還有乙個小點就是可能會用到離散化(傳送門)

具體實現看**

#includeusing

namespace

std;

inta[mxn],b[mxn],n,sz,ans;

intdp[mxn],f[mxn];

int lowbit(int

x)inline void motify(int x,intw)}

intget(int

x)

return

temp;

} int

main()

sort(b+1,b+n+1

); sz=unique(b+1,b+n+1)-(b+1

);

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

ans=0

;

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

cout

}

BZOJ5484(LIS性質 樹狀陣列)

題目傳送 學習的這篇題解。結論 1.直觀感受一下會發現找到lis,lis裡的東西相對位置是不會變的,其他的移一移總會排序成功的,所以其他的就是最小集合了,第一問的答案就是n lis 2.尋找字典序第k小的集合,相當於是尋找字典序第k大的lis,然後把這個lis刪去,就是第二問的答案集合。前置技能 樹...

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

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

11 01T2 樹狀陣列維護動態LIS

描述當一陣風吹來,風箏飛上天空,為了你,而祈禱,而祝福,而感動 oyiya 在 ak 了 ioi 之後來到了鄉下,在田野中玩耍,放鬆身心。他發現前面有一排小朋友在放風箏,每乙個風箏有乙個高度 hi,風箏的高度可能會隨著小朋友的心情而改變。這時,毒瘤的 oyiya 有了乙個毒瘤的 idea,他想知道改...