啟發式合併+平衡樹+並查集…
複雜度o(n
lg2n)
,還是可以過的..
splay一次寫過然而後面各種跪..除錯能力捉急…估計是wc2017課前助眠**聽太多了…
#include
using
namespace
std;
const
int n = 100005;
struct node tree[n*30];
int top = 0;
class splay_tree
void update(int nd)
void zig(int nd)
void splay(int nd)
if (tree[nd].fa) zig(nd);
}void insert(int &nd, int dat, int id, int fa = 0)
}void dfs(int nd, int tab = 0)
public:
splay_tree():root(0) {}
inline
void push(int dat, int id)
inline
int& get_root()
int find_kth(int k)
return
0; }
void merge(int nd)
void dfs()
} f[n];
int target[n];
inline
int findp(int i)
inline
void link(int i, int j)
void merge(int a, int b)
}int n, m, q, dat;
int a, b;
char opt;
void work()
scanf("%d", &q);
for (int i = 1; i <= q; i++)
}int main()
HNOI 2015 解題報告
by tuifei oier 完成了 2015 年的 6 題後,決定寫一篇解題報告記錄一下各個題的做法和值得積累的 tricks。按我心情排序。這一年總體上考察兩個方面 dp x3 與 資料結構 x2 考察點 點分樹。首先構建出點分樹,對每個點用資料結構維護管轄區域內所有點到自己以及點分樹父親的距離...
HNOI2004 打鼴鼠 解題報告
這個題一上來就想到了是o m2 的dp,但是沒有想到優化,導致跑得比較慢。當然其實對於這個題而言優化有無是無所謂的,但是這個優化的思想還是很好的。我一開始是想得用前面的去更新後面的,而如果我們反著來想的話,就可以發現乙個優化了。設f i 表示最後到i可以取得的最大數量,那麼顯然有方程fi max 這...
HNOI 2004 敲磚塊 解題報告
hnoi2004 敲磚塊 一道dp題,把其看成乙個直角三角形,敲第 i 列的第j塊時,第i 1列至少是敲了j 1 塊的 s i j k 是敲掉第 i 列第 j塊一共敲了 k 塊的最大分值,那麼轉移方程為 s i j k max s i 1 h k j j 1 h n i h 1 ja h i 時間複...