前言:
因为题目大部分比较简单,所以合在一起写个总结。
T1:
“喝喝喝”这是个奇怪的名字。
受了集训前新高一做的一道题的启发,很容易想到先求出不合法对,包含它们的区间即为不合法,但是这题不用求矩形覆盖,而且求不合法对也不用求出全部的。
先想想不合法的区间怎么找?其实可以枚举倍数,这样均摊log n,但要是纯心构造也可以卡掉,稳定的是枚举约数,一次是
n√
。
但是所有不合法的对的个数可能就超了,假设一不合法对的左端点是x,只需要找出一个最左的右端点y,那么区间[1..x - 1, y+1..n]就是不合法的,至于在y的右边的右端点,是所影响的不合法区间是包含y能影响内的。
之后随便扫一下就好了,枚举左区间端点,用了一个multiset维护区间右端点的最小值。据说只用一个桶也行,我比较蠢吧。
T2:
一个联通块必有一个环。找到环,拆开,用线段树维护,环上的每个点下面有一颗子树,直接回溯+multiset+环上的线段树就可以求出答案即可。
无限接近于3000bytes的代码,最后两分钟调对样例,拍都没拍交了上去,心里怀着梦想可以对,结果Rp+++++。
比赛后,发现某些人直接倍增700bytes跳过了,焖。
T3:
找规律能力不够强啊,看了那么久都没看出来(看出来的人前面题都炸了)。
题解好神奇,数论原来可以这么玩,等到我弄懂了,后面的博客会补充。