闲话
发现最近做题有一个很大的问题。
想出来的思路一般都是 极为麻烦的。
经常因为懒得写无法实现而直接扔掉。虽然正确性和复杂度没问题。
算了看几个例子吧。
以下做法全都不是正解,并且基本都很伞兵。
3.7 T1
这个东西一看就像矩阵优化递推啊,\(m \le 16\) 诶。
然而我们发现貌似每个位置的矩阵的不相同的。
不过这没关系。我们先考虑一下 \(n\) 为 \(2^x\) 的情况。
同时以 \(b = 2\) 举例子。
首先,位置 \(i\) 的矩阵只和 \(i\) 中质因子 \(2\) 的个数有关系。
\(\prod_{i = 0}^{n} A_i\) 可以写成 \(\prod_{i = 0}^{n / 2} A_i \times \prod_{i = 0}^{n / 2} A_{i + n / 2}\)。
然后我们发现,前面和后面两部分只在 \(i = 0\) 的时候有区别。
所以就只求左边,简单处理一下就是右边了。
具体过程有点像矩阵求逆。我不会所以考场上想了一个暴力的高斯消元实现。复杂度 \(O(m^4)\)。
然后就把 \(n\) 按位拆开求解就好了。
总体复杂度貌似是 \(O(m^4 b \log_b^2 n)\),当 \(b\) 为质数的时候。
比题解差一点但是通过绰绰有余。
打了一点之后发现这东西远没有想的这么简单。分类讨论麻烦的要死。
然后我就扔了。想必现在是写不出来的吧。
Moo Route II S
本来是个挺水的题,结果口胡了一个奇怪的建图法。
难度提升了差不多两个颜色。。。
\(Sandom\) 没有打出来也许也有我的原因吧。。。
题解早就写好一份了,扔在这里。
Fountain
单调栈是啥,我只会直观的笛卡尔树。
我们发现这东西是个单调栈。
是个从前到后的递增的单调栈。
然后发现起点不固定。
那就套路的建出来笛卡尔树好了。
建一个大根笛卡尔树,把询问全都挂到树上,然后 DFS 一遍。
笛卡尔树的性质之一就是,一个点到根的路径上所有左链上的点构成了一个单调栈。
左链就是从前到后跑单调栈,右链就是从后往前。
然后就在 DFS 的同时维护个栈,栈里面二分即可。
从代码长度上来看比多数人的长一点点。
虽然不算难打,但是细节很多啊。
md这要是考试题我就没了。
离谱题
胡完思路之后被告知了正解。
只能说我不想说啥了。
首先假设我们啥也不知道,直接硬上。
我们可以开一个足够大的桶,然后顺着扫。
但是显然复杂度爆了。
阈值分治,开一个 \(10^7\) 的桶,然后再开一个堆。
对于 \(\le 10^7\) 的数,扔在桶里,剩下的扔到堆里。
考虑堆里面会有多少的数。所有的数之和最大为 \(10^{12}\),并且这个和是不变的。
那么大于 \(10^7\) 的数最多只会有 \(10^5\) 个。
所以最后复杂度就是 \(10^7 + 10^5 * \log n\)。
我当时还在想,这个数据范围大小正好,想必正解就是这个吧。
我不想多说什么了。
怎么会逝呢。