Day 2
T1. script
Description

$n\le 10^5$
1s , 512MB
Solution
考虑递归解决。比较简单,不细讲了。
Code
1 |
|
T2. deletion
Description
Natsuzora 有一个长度为 $n$ 的排列 $a$。他想要将序列中的 $m$ 个数删除。
魔法工具也有 $m$ 种,其中,第 $i$ 种魔法工具能够将排列中任意一个的长度为 $l_i$ 的区间中最大的数删除。每个魔法工具最多只能使用 $1$ 次。
每次删除操作后,序列的长度将减少 $1$,且删去的数的右边所有数的下标减少 $1$。
$n\le 2\times 10^5$
1s , 512MB
Solution
$l_i$ 更大的要越先用掉。如果一个数包含另外一个数,则这个数比另外一个数更先用掉。
两个单调栈维护一下即可。
我写的是 $n^2$ 暴力过去了,就不贴了。
T3. candy
Description
P8746 [蓝桥杯 2021 省 A] 分果果
Solution
外面枚举最小值 $minn$ ,考虑求最大值。
一个显然的性质是任意两个人取糖果的区间不包含。考虑两个区间 $l1<l2<r2<r1$,如果换为 $[l1,r2],[l2,r1]$ 这样的极差显然更小。
令 $f[i][j][k]$ 表示,第 $i$ 个区间,上一个取一颗糖果的位置为 $j$ ,上一个取两颗糖果的位置为 $k$。$j\ge k$。最大值最小为 $f[i][j][k]$。
- 两颗糖果的位置不取,$f[i][j][k]\Leftarrow f[i][j][l-1]$ ,这也说明 $f[i][j][k]$ 关于 $k$ 单调递减。
- 在 $t\le k$ 取,$f[i][j][k]\Leftarrow \max(f[i-1][k][t],s[j]-s[t])$ 把 $\max$ 中的两项当作两个关于 $t$ 的函数,可以发现两者都关于 $t$ 递减。所以取 $t$ 最大的即可。但是注意要满足 $s[j]-s[t]\ge minn$
- 在 $k+1\le t\le j$ 之间取。这在之后会在第二种情况算到,所以可以不需要转移。因为转移两次的一定小于等于转移一次。如果转移两次的继续取,等到大于转移一次的位置,转移一次的位置就成了转移两次的。
这样只需要一个指针维护即可。$dp$ 的复杂度为 $n^2\times m$
外面枚举的最小值复杂度是 $O(\dfrac{sum}{m})$ ,具体的,枚举的上界是 $\dfrac{2nw}{m}$
总的复杂度就是 $O(n^3w)$
Code
1 |
|
T4. twotypes
Description
给你一张 $n$ 个点、$m$ 条边的有向无环图,图中的每条边有黑和白两种颜色。保证从 $1$ 号点出发可以到达任意一点。
共有 $q$ 次询问,在第 $i$ 次询问中,给定 $a_i$、$b_i$ 和 $x_i$,表示设黑边边权为 $a_i$,白边边权为 $b_i$,在这种条件下,请你求出从 $1$ 到 $x_i$ 的最短路径。
$n,q\le 5\times 10^4,m\le 1\times 10^5$
1s , 1024MB
Solution
考虑一个点对答案可能有贡献的路径,用黑边条数和白边条数 $(x,y)$ 。目标 $\min Ax+By$,令 $Ax+By=k$,化为 $y=-\dfrac{A}{B}x+\dfrac{k}{B}$ 。根据几何意义,即在原图中的下 $\dfrac{1}{4}$ 的凸包上。可以证明,值域在 $n$ 的点构成的凸包的最大点数为 $O(n^{2/3})$ 级别的。实际上这个上界很松。
具体维护凸包。每次凸包合并。由于这个图是 DAG,合并的次数最多只有 $m$ 次。
查询的时候没必要二分。直接扫过去。
总复杂度 $O((m+q)n^{2/3})$
Code
1 |
|