摘要:
今天上午思考了很久的dsu on tree的原理,现在来整理下自己的理解。 dsu on tree: 首先,重儿子不一定只在重儿子子树内。对于每个非叶子节点,都存在一个重儿子。 为什么dsu on tree难以处理带修改的子树问题? 因为对于dsu on tree的dfs中,重儿子的子树只会被递归到 阅读全文
摘要:
前言:写得比较简陋~以后有时间一定来完善。 快速傅里叶变换,又叫FFT。 可以在O(n)内处理多项式乘法的算法。 一个n - 1多项式g(x) 可以用系数表示为$\sum_{i = 0}^{n - 1} ai * x^{i}$ 对于我们g(x)多项式中的每一项,我们可以看成有一个函数f(x)。 将每 阅读全文
摘要:
A:水题 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL, int> pii; const int N = 1e6 + 5; const int M = 2000 + 5; con 阅读全文
摘要:
A:没写。 B:没写。 C: m个块来考虑,假设当前为[1,m]位置都站满了。 现在我们要到[2,m + 1],如果a[1] > a[m + 1],跳过去之后a[m + 1]被站满。 如果a[1] < a[m + 1]那么跳过去没被站满,那么剩下的只能有[2,m]来填充。 那么综上所诉我们的答案就是 阅读全文
摘要:
无语,调试的煎熬.. 数列分块入门 9 求区间的最小的出现最多次数的数。 这里很显然先处理出块与块之间的最小众数,然后两边的残余块暴力就行。 如何高效找两边的,这里就用到了二分,首先要对数离散化,然后值的容器里存位置,然后直接用查询的区间去二分,这样就能找到给定的区间里有多少个了。 PS:预处理写错 阅读全文
摘要:
A: bfs搜索即可,每次都对当前的数字进行所有的变换,然后记录一下状态有没有出现过,第一次遇到那个数字一定是时间最小的。 这里我的写法多次一举写了个小顶堆的bfs。 #include<bits/stdc++.h> using namespace std; typedef long long LL; 阅读全文
摘要:
首先我们需要知道的是中序遍历,因为这样我们才能知道根的左右子树,否则无法实现还原一棵唯一的二叉树。 已知先序遍历,中序遍历,还原二叉树。 我们知道先序遍历中第一次遇到的一定是根节点。 然后我们就可以根据先序中的根节点位置,在中序遍历中取开辟左右子树。 即递归取分解左右子树。 按照中序的思想,我们会一 阅读全文
摘要:
前几天好像安装了插件,然后谷歌的主页就被360劫持了。 不管怎么设置打开永远都是360. exe里也没多东西。 version里面的命令行里多了360的主页地址。 看了很多解决方法都没用。 最后把exe的名字改成了sb360就解决了。 阅读全文
摘要:
非常好的一个题: 首先进行化简:$yn! - xn! = xy \Rightarrow yn! - xn! - xy + (n!)^{2} = (n!)^{2} \Rightarrow (n!+y)(n!-x) = (n!)^{2}$ 可以看到的是,式子左边是一个完全平方数。 那么显然式子的左边是它 阅读全文
摘要:
这题一开始没注意到d的范围,所以没做出来。 这里我们可以想到的是,我们对询问反向涂色,那么对于已经涂过的点的颜色就是最终颜色,那么就减少了很多重复的不必要操作。 然后因为d最大只有10,所以我们维护每个点已经涂到过的最远距离之后,暴搜染色的复杂度就最大为10 * m左右。(即d从0开始一直+1) # 阅读全文