傳送門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時子樹內最多選的點數。我們不難...