2019牛客暑期多校训练营(第八场)
Contest Info
[Practice Link](https://ac.nowcoder.com/acm/contest/888#question)
Solved | A | B | C | D | E | F | G | H | I | J |
---|---|---|---|---|---|---|---|---|---|---|
8/10 | O | O | O | O | O | - | O | - | Ø | Ø |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
A. All-one Matrices
题意:
给出一个\(n \cdot m\)的矩阵,找出极大全\(1\)子矩形的个数。
B. Beauty Values
题意:
给出一个序列\(a_i\),求每个子区间的不同数的个数和。
思路:
对于每个数分别计算贡献,假设它在所有区间,然后减去它不在的区间的个数。
不在的区间即相邻两次出现之间的长度为\(x\),那么这一段不在的区间个数即为\(\frac{x(x + 1)}{2}\)
C. CDMA
题意:
构造一个\(m \cdot m\)的矩形,使得任意两行的\(\sum\limits_{i = 1}^n s_it_i = 0\)
思路:
\(2\)的情况:
1 1
1 -1
然后仿照着,手玩出\(4\)的情况:
1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
大概就是这样。。。
D. Distance
题意:
在一个\(n \cdot m \cdot h\)的三维空间中,有两种操作:
- 加入一个点\((x, y, z)\)
- 询问已加入的点中距离\((x, y, z)\)最近的点的曼哈顿距离
思路:
分类,将绝对值拆出八种情况,分别用\(8\)个\(BIT\)维护即可。
时间复杂度\(\mathcal{O}(8nlog(n)log(m)log(h))\),最好不要用\(vector\),用一维数组,然后用和函数映射下标过去。
E. Explorer
题意:
有\(m\)条边,每次允许等级为\([l, r]\)的人通过,连着\((u, v)\)两点。
问有多少种等级的人可以从\(1\)到\(n\)。
思路:
从\(1\)到\(n\)相当于并查集处理后是否在一个连通块里。
那么把\([l, r]\)视为该边的存活时间,线段树分治并查集即可。
G. Gemstones
签到。
I. Inner World
题意:
有\(n\)棵有根树,每棵树刚开始只有一个\(1\)号结点,并且它是根。有两种操作:
- \((u, v, l, r)\),将标号为\([l, r]\)范围内的树添加一个\(v\)结点,其父亲为\(u\)
- \((x, l, r)\)询问标号在\([l, r]\)里的树的\(x\)的子树大小,如果没有\(x\)这个节点,那么子树大小为\(0\)
思路:
其实有\(n\)棵树这个条件是假的,不要考虑有那么多棵树。
转化一下题意,每次加入一个点,每个点有一条线段\([l, r]\),每次查询的时候相当于查询\(x\)子树中所有线段与询问的线段的线段交的和。
那么离线,建树后跑出\(DFS\)序,那么\(DFS\)序一维,线段一维,将询问拆成前缀形式,扫描线即可。
J. Just Jump
题意: