摘要:
嘟嘟嘟 树上莫队。 要会树上莫队,得先会树上分块,A了王室联邦再说。(欢迎查看我的题解) 其实树上莫队和线性的莫队很像,大体思路完全一样:先把询问分块,然后按块排序。接着如果带修改的话就维护三个指针,否则两个。 但是有一个区别,就是移动指针的时候该怎么移。线性莫队往左往右移并且统计答案就行了。但是树 阅读全文
摘要:
嘟嘟嘟 学树上莫队的时候给我推了糖果公园,然后题解说最好先把这道题做了,于是我就来了 这道题好像就是所谓的树上分块。 题中的限制很宽,只要输出任意一种合法方案就行。那么在dfs的时候自然能想到如果当前子树大小大于$B$的话,就把这个子树分成一块。 但这么做肯定不对,因为如果只扣掉一棵子树的其中一部分 阅读全文
摘要:
嘟嘟嘟 莫队板子。 记住:删除是先删除再移动,添加是先移动在添加! #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #include 阅读全文
摘要:
嘟嘟嘟 一眼就知道是莫队。 还不带修改,美滋滋。 按莫队的方法排序,然后用小学数学算一下概率,分子分母单独维护。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #in 阅读全文
摘要:
嘟嘟嘟 这题原本莫队能过,自从某谷加强数据后好像就只能80了。 但这并不重要。 (其实写这篇博客只是想记录一下莫队板子) 莫队,总而言之,离线,排序,暴力。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> 阅读全文
摘要:
嘟嘟嘟 带修改莫队。 以前学过没懂,今天又学了一遍竟然会了。 其实他跟普通莫队相比,就多了一维:时间。 首先也是都离线。 然后对于每一个询问,记录这几个信息: 1.左右端点。 2.询问编号。(为了输出答案) 3.时间编号。 然后把询问排序。这个和无修改莫队一样,第一关键字是左端点所在块,第二关键字是 阅读全文
摘要:
嘟嘟嘟 有谁能想到这题会用到主席树呢?(不愧是WJMZBMR出的题) 首先考虑如果区间是固定的话,中位数该怎么求。 没错,二分。如果大于当前二分值$mid$的数比小于$mid$的数多,说明$mid$还可以再变大,向右二分;否则向左二分。 如果我们把小于$mid$的数都标记成$-1$,大于的标记成$1 阅读全文
摘要:
嘟嘟嘟 区间第$k$大扯到树上啦 但是不要慌,仍是不难,仔细想一下就行了。 主席树中的每一棵线段树维护的是一个前缀的答案。利用这一点,把前缀放到树上的话,就是每一个节点到根节点的答案。 所以主席树就建出来啦。 对于每一组询问$(x, y, k)$,令$z = lca(x, y)\(,则\)(x, y 阅读全文
摘要:
嘟嘟嘟 一句话题意:带修改区间第$k$小。 不修改都会,主席树板子。但是有修改就要比较深入的理解主席树了。 众所周知,主席树中以$i$为根的线段树维护的是$[1, i]$这个前缀的权值,因此若修改一个点$a[x]\(,必须把\)[x, n]$的线段树全修改了,单次修改复杂度为$O(n \log)$, 阅读全文
摘要:
嘟嘟嘟 很显然是主席树啊。 首先要稍微想想:主席树的板子是单点插入,区间查询,而区间询问是用的是前缀和相减。但这道题是区间修改,单点查询。插入和查询操作是相反的。 那么就能想到前缀和的逆运算——差分。首先把修改区间拆成$L$和$R + 1$两个时间点,然后按时间排序,遇到$L$就把对应的优先级$+1 阅读全文