
主席树
Mr_Xujh
无论走在那条路上都要做一个优秀的人
展开
-
HDU 4348 To the moon
题目要求有一下几个操作:区间加个数(此时时间计数+1),查询区间和,查询历史区间和,时间回退到过去某个时间。 可持久化线段树,用T[i]表示时间为i的时候的树根; 由于整一个更新只有单一的加法,所以我们不必利用lazy标记,我们用一个标记来记录当前节点的整段区间被累加了多少,当询问的时候我们在从根节点走到目标结点的过程中不断累加所经过节点上的标记值,这样就提高了每棵树的共享信息 #i原创 2015-08-22 19:49:46 · 625 阅读 · 0 评论 -
POJ 2104 K-th Number
题意:给定一个数组,输入i, j, k,也就是询问i到j之间第k大的数 思路:暴力,主席树(模板题); 1、 暴力就是对每一个数标好顺序,然后排序(这时候预处理完成); 对于每个查询,暴力的扫一遍,遇到序号在i,j之间的数就k--,k=0是,就是所找的数 /*暴力法 Time: 7563MS */ #include #include #include using names原创 2015-07-19 22:10:54 · 514 阅读 · 0 评论 -
SPOJ COT 10628 Count on a tree
这题和普通的第K大类似。 普通的第K大,是从后往前建立主席树,前一个在后一个的基础上修改。 而树上第K大,依旧是每个结点一棵主席树,是在父节点的基础上修改。 这里用了倍增法求lca 这代码要跑2900MS左右。。 #include #include #include #include #include #include using namespace std; const i原创 2015-08-04 09:26:57 · 684 阅读 · 0 评论 -
ZOJ 2112 Dynamic Rankings
参考: http://blog.youkuaiyun.com/acm_cxlove/article/details/8565309 http://www.cnblogs.com/Rlemon/archive/2013/05/24/3096264.html http://www.cnblogs.com/kuangbin/p/3308118.html http://seter.is-program原创 2015-08-05 11:33:05 · 607 阅读 · 0 评论 -
HDU 4417 Super Mario
题意:给你一个N大小的数列a[0].....a[n-1],输入L,R,H 求[L,R]区间内满足a[i] 这里我用了主席树来写 #include #include #include #include #include #include using namespace std; const int N = 100005; const int M = N * 40; int n,m,原创 2015-08-05 16:06:02 · 407 阅读 · 0 评论 -
Codeforces 587C Duff in the Army
题意:给出一棵树,每个节点有一个权值集合(一个点有多个值),现在有q个询问,query(u,v,a)表示询问u到v之间的前a小的数。 与 http://blog.youkuaiyun.com/mr_xujh/article/details/47271843 差不多 就是这一题的每个节点上有多个值,不用离散化,查询的时候要输出前a小 #include #include #include #inclu原创 2015-10-26 11:57:50 · 1207 阅读 · 0 评论