2013年8月3日
摘要: 归并树是在建树的过程中保存归并排序。归并树以1 5 2 6 3 7为例:把归并排序递归过程记录下来即是一棵归并树: [1 2 3 5 6 7] [1 2 5] [3 6 7] [1 5] [2] [6 3] [7] [1][5] [6][3]用对应的下标区间建线段树:(这里下标区间对应的是原数列) [1 6] [1 3] [4 6] [1 2] [3] [4 5][6] [1][2] [4][5]每次查找[l r]区间的第k大数时,在[1 2 3 4 5 6 7]这个有序的序列中二分所要找的数x,然后对应到线段树中去找[l r]中比x小的数有几个,即x的rank。由于线段树中任意... 阅读全文
posted @ 2013-08-03 22:13 tobec 阅读(205) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4616转载自http://blog.csdn.net/tri_integral/article/details/9499037题意:给出一棵树,树上每个节点都有权值,某些点有陷阱。可以任选起点,每个点只能走过一次,如果走到某点不能再走或者走到某个点恰好走了C个陷阱就停在该点,问最后路径上点权之和能得到的最大值。题解:树形DP。用dp[u][j]表示以u为根的子树上,从某点走到u且走过j个陷阱能得到的最大值;考虑如果最优解走过了k个陷阱,如果k!=C,那么其起点和终点都可以为没有陷阱的点,如果k=C,那么起点或 阅读全文
posted @ 2013-08-03 00:17 tobec 阅读(243) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4612双连通分量 + 树的直径一样的代码 C++ 交了两遍过的 , 看了网上的第一行 , 手动 设定 栈空间#pragma comment(linker,"/STACK:102400000,102400000")#include #include #include #include #include #include using namespace std;#define inf (1 g[maxn];void solve() { idx = cnt = top = 0; memset(d 阅读全文
posted @ 2013-08-03 00:11 tobec 阅读(205) 评论(0) 推荐(0) 编辑