见证者为见证而来,铭记者因铭记而生|

园龄:粉丝:关注:

Atcoder ABC393 题解

ABC393

A

分四类输出即可。

Takahashi Aoki result
fine fine 4
fine sick 3
sick fine 2
sick sick 1

submission.

B

n 很小,O(n3) 枚举 i,j,k,判断是否满足 ji=kj,且 ai=Aaj=Bak=C
submission.
当然可以 O(n2) 枚举 i,j,算出 k

C

把所有不是自环的无向边丢进 set,set 中元素个数就是最终简单图的边数。
m 减边数就是答案。
submission.

D

10 交换,就是将 1 平移一位(好理解一点?)。
1 的个数为 tot,所有 1 的位置是 a1,a2,,atot。若最终的区间是 [l,l+tot1](左端点为 l),那么总代价就是 i=1tot|ai(l+i1)|=i=1tot|(aii+1)l|laii+1 的中位数即可(经典结论,绝对值可理解为数轴上两点距离,画图,调整法可证)。

submission.

E

枚举倍数比枚举因数好做得多。

大体思路是对于枚举 ai 的每个因数 x(GCD 一定是本身的因数),若 x 是不少于 k 个数的因数,那么 x 这个数就是一个可能的答案,所有的 x 取 max 即可。虽然我们包含了一些错误的答案,不一定是【最大】公因数,但一定会被更大的覆盖掉。

cntii 在原序列中出现了多少次。
我们枚举值域内所有的数 i,枚举所有 i 的倍数 ji 就是 j 的因数),那么 i 这个数就是 cntj 个数的因数。

我们再次枚举 i,j,如果 cntik,那么就可以用 i 更新 ansj

输出每个 ansai 即可。

F

我们先用二分求出以 ai 结尾的 LIS 长度 fi
具体地,我们建一个辅助数组 b,初始长度为 0,维护其单增性。
从前往后枚举 i,如果 ai 大于 b 的尾元素,就将 ai 插入 b 的末尾,fi 就是 b 的长度;否则,找到第一个 b 中大于等于 ai 的位置 p,连同 p 这个位置,fi 就等于 p,然后将 bp 改为 ai
首先 b 的单增性是不会被破坏的,无论哪种情况。
f 的更新操作也很好理解,相当于找到了前面一个比当前小的元素转移。
那为什么要修改 b[p]=a[i] 呢?为了后面转移。后面可能有 ai<xbp 的元素 x,这时将 x 接在 ai 后面显然不劣。(手玩一下,很好理解)

每个询问的上界只需保证 r 大于等于末元素即可(因为是 LIS)。
于是就是一个二维数点的板子。
具体地,就是平面上有 n 个点 (i,ai),值为 fi,每个询问要求矩形 (0,0)(r,q) 中的最大值。
离线一维,用数据结构(树状数组)维护另外一位即可。

submission.

G

不会。

posted @   wfc284  阅读(29)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起