bzoj 4919 大根堆(set啟發式合併)

2021-08-18 17:40:26 字數 556 閱讀 5691

傳送門biu~

假設是在序列上,就變成了nlogn的dp求最長上公升子串行問題;假設是在樹上,我們只需要在每個節點存下dp陣列,然後用set的啟發式合併將dp陣列合併就可以了(代替splay)。

#include

#define n 200005

using

namespace

std;

vector

e[n];

multiset

s[n];

multiset

::iterator it;

int n,val[n];

void dfs(int x)

it=s[x].lower_bound(val[x]);

if(it!=s[x].end()) s[x].erase(it);

s[x].insert(val[x]);

}int main()

dfs(1);

printf("%d\n",s[1].size());

return

0;}

題解 BZOJ4919 大根堆

題面 傳送門。老師說今天要考一道線段樹合併,然後。然後這道題我就gg了。當然可以用線段樹合併寫,只是比較複雜 有人賽時想了個貪心,然後被機房巨佬hack了,結果在hack的過程中巨佬想出了正解。貪心思路 對於乙個節點,取右邊的 大一點的 肯定更優。其實很好hack啊,隨便搞一條鏈就可以了 ac思路 ...

BZOJ4919 大根堆 樹上LIS

題目描述見鏈結 樹上 lis lisli s 問題,使用std multisetst維護當前子樹內所有可能的 lis lisli s 結尾,從前往後 lis lisli s結尾 對應的長度遞增 子樹之間互不影響,只需考慮子樹根節點 u uu 對子樹內的影響,模擬 序列lis lisli s 的做法,...

BZOJ4919 大根堆 線段樹合併 二分 離散化

題目鏈結 題意 給你一棵樹,每個點有點權,問你最多能選出多少個點,使得所有選出的點中子節點的權值都比父節點小 嚴格小於 點數2e5,權值1e9 題解 首先的乙個暴力是用乙個樹形dp,dp x i dp x i dp x i 表示點x xx為根的子樹內,最大權值是i ii時子樹內最多選的點數。我們不難...