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

题意:

posted @ 2019-08-24 20:00  Dup4  阅读(170)  评论(0编辑  收藏  举报