摘要: 挺神的一道题 ~ 由于两个人选的数字不能有互质的情况,所以说对于一个质因子来说,如果 1 选了,则 2 不能选任何整除该质因子的数. 然后,我们发现对于 1 ~ 500 的数字来说,只可能有一个大于 $\sqrt 500$ 的质因子(两个的话乘积就超过 500 了) 而不大于 $\sqrt 500$ 阅读全文
posted @ 2019-12-02 20:59 EM-LGH 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 这个和 bzoj 5469 几乎是同一道题,但是这里给出另一种做法. 你发现你要求的是一个树上 LIS,而序列上的 LIS 有一个特别神奇的 $O(n\log n) $ 做法. 就是维护一个单调递增的栈,如果发现新加元素大于栈顶,则直接加入,否则在序列中二分出一个大于等于该元素的最小值,然后替换掉. 阅读全文
posted @ 2019-12-02 18:25 EM-LGH 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 在 dp 问题中,如果发现可以用后缀最大值来进行转移的话可以考虑去查分这个后缀最大值. 这样的话可以用差分的方式来方便地进行维护 ~ #include <bits/stdc++.h> #define N 200007 #define ll long long #define lson t[x].ls 阅读全文
posted @ 2019-12-02 16:25 EM-LGH 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 标签:树形dp,枚举,树的直径 一上来看到这个题就慌了,只想到了 $O(n^3)$ 的做法. 碰到这种题时要一步一步冷静地去分析,观察数据范围. 首先,$n\leqslant 5000$,所以可以先 $O(n)$ 枚举切断哪条边. 而如果暴力枚举连哪条边的话时间就是爆炸的,不妨冷静地分类讨论一下. 阅读全文
posted @ 2019-12-02 10:36 EM-LGH 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 读错题了,然后写了一个树上 LIS,应该是对的吧...... code: #include <bits/stdc++.h> #define N 200005 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using n 阅读全文
posted @ 2019-12-02 08:57 EM-LGH 阅读(132) 评论(0) 推荐(0) 编辑